you've summarized the questions everyone has, pretty well. Unfortunately, no, there isn't a default way to sync to SFDC and a Campaign at the same time all while waiting for x-number of processes to run through your lifecycle. The normal way to do it is to have the Sync to SFDC flow step in your global lifecycle; that ensures that every lead runs through that process and is in fact created in SFDC. From a global perspective, you can't add people to campaigns. Therefore, the best way to accomplish this is locally in your program flow steps. But that's where it gets tricky—because you still want your lifecycle processing to finish before you add them to the SFDC Campaign (otherwise it initiates the Sync to SFDC process and if your lifecycle isn't finished you'll miss much-needed info from your lifecycle that impacts routing/scoring). This mere situation is the reason why most people do not use the campaign sync process, and instead rely on a wait step (do your best to time your lifecycle to see how long it takes), then adding people to campaigns at that point.
You don't need a wait step in your local programs before assigning acquisition program or program member status—as long as you're not synced—because those would just be local to the program and not initiate any CRM processes.
Hope that helps.