We have multiple users making changes. Some are quick changes to get through dev, qa, and prod. Some are part of a project that don't have to move through the environments quickly. The quick changes can't move through publish process since there are project changes and we end having to move changes "manually" through publish process.
Good question. Currently if there are multiple users making changes at the same time, there isn't a way to merger those changes together when both publish. One thing you can do is "Lock" the profile when someone begins making changes, but hasn't saved/published.
When a user A makes a change the Save/Publish button is removed from other users' screens so they can't overwrite the user A's changes. Once user A has saved or published other users can then go ahead and make changes and save and publish.
To enable this:
1) Click the Save/Publish button
2) In the upper right of the modal click "Configure Publish Settings"
3) Check the box next to "Lock Profile."
If the project based things that shouldn't go to production are tag based you can use the Advanced Settings in the Tags to make sure they don't get published to production. Make sure "Publish to Prod" is set to "No" for the tags you do not want to get pushed to production. Here is a post with more information:
This setting will keep tags from getting published to certain environments, even if the tags are enabled and the profile is published.
Extensions since they are usually tied to a specific tag can, for the most part, be controlled using the Advanced Setting. Extensions that are scoped to PreLoader, All Tags or DOM Ready can not be controlled this way. In this case I usually just make sure the extensions are disabled before publishing. That way you don't have to move around through different version to copy things over manually.
I hope this helps.