Sure, but building a prioritization engine can be a very complicated challenge, depending on how many programs you're working with. Once you divine the correct priority, you'd just have to adjust the recurring batch and/or triggers that add new members to say Member of Program > Not In > Program X.There's not enough context above to give you a better answer, unfortunately.
Rather than generic campaigns and triggered ones for certain lead sources, I'd recommend you re-evaluate your whole nurture strategy to be more cognizant of the customer buying cycle. For example, if your nurtures were TOFU / MOFU / BOFU-style content, you could trigger an email for these FB ad leads, and then after that email is served, wait and then add them to the correct funnel stage. There's no silver bullet, and getting this right means you're waaaaay down the maturity curve as a marketing automation/Marketo expert. Good luck!
You can do this by adding a choice to your "Add to Engagement Program" flow step (see below). Just add 1 extra choice above the default that says "Member of Engagement Program" = True.
Probably more bulletproof to build a smart list of those in the engagement program you want to suppress (can dictate exhausted status here as well) and then use the same process above but with Member of Smart List = Your smart list, do nothing. If they are not a member of your suppression smart list, the first choice is skipped and they will be added to your engagement program via the default step.
As joe mentioned, you really should be cautious with these types of exclusions as they are easy to forget and aren't easy to scale overtime. Maybe it makes sense to just add a new stream to your existing nurture and just put people into one stream or the other based on their creation source. Then you don't run the risk of them being in 2 streams at once.