I know I'm late to the party here, but for what its worth and for anyone that comes across this post I'll add my two cents. we have a setup almost exactly as @TMan mentioned, except that we have a Dev, QA, and production site where Dev is unmanaged and the source of our customizations and QA and production are both managed. I've spent far more time than I would have liked to with the solutions and customization layering processes to understand how everything comes together to get the final result. I've also added third-party managed solutions into the mix. Seeing the end result of all that, I have come to the conclusion that managed solutions are absolutely NOT the way to go, except maybe for a third-party solution provider, but the target systems IMHO should all be customized with unmanaged changes. One major issue I found was when I brought third-party managed solutions into our Dev environment, we will have dependencies to components in that solution once we export our own customizations as a managed solution to deploy to QA and production. The interesting thing with this is that the layering and dependencies on the Dev site are flipped around in reverse order once you go to a QA or production managed site because your own customizations go from unmanaged to managed, and managed customizations are applied in order of install date in the system. Without getting into a lot more detail here, the summary is these dependencies will never go away once introduced into one of those managed environments and you can't uninstall your own customizations unless you want data loss, and in some cases you might not be able to uninstall the solution even if you were ok with data loss due to the dependencies. All our environments are CRM Online so we don't have the option of mucking around in the database directly to get rid of stuff we don't want. The key here is to know that in most cases once you put a managed solution in place it is forever, permanently there and you can only apply additional unmanaged changes on top of what is there, you will have no way to clean up unused or unwanted components. I spent a lot of time doing my own research and testing and also spent a lot of time on the phone with Microsoft.
Bottom line: managed solutions for a multi-site setup such as Dev to QA and/or production is a very bad way to go, you're losing flexibility and could possibly hit a brick wall in some situations. You're much better off keeping everything unmanaged and having the flexibility you would expect to properly customize your systems