Hi Lindsay,
If you are looking to group Contacts by the lifecycle of the Account as determined by Opportunity Stage, then Delinda's approach is sound.
The only time that Account Stage (and any other triggers that are updating a custom Contact Stage field) might require further thought > if you have different business units sharing a single Account, and Contacts may be a customer of one brand and prospect of another, but there's plenty of solutions to this scenario.
Pierce and Jason have also touched on a relevant point. Even if you don't currently, you're almost definitely going to want to report on the influence of your campaigns on Opps at some point. For this reason it's imperative that at a minimum you always have a Primary Contact associated to each Opp. Reason being, that you'll never be able to report on how an individual's engagement with a campaign influnced a sale if there is never a link made between the individual and the Opportunity.
Jason's approach to remove New Opportunity button from Account layout is the way to go, and also have your SFDC Admin create a rule to ensure no Opp can be created without Primary Contact role - that way Sales are forced to create an Opportunity from the Contact that they're dealing with, and by association, the Opp is still linked to the Account.