Jason,
I have met these problems when building my commercial product based on Eclipse and Xtext with Tycho so let me explain what I've done.
My product is composed of:
Several plugins
One feature composed of these plugins
One product feature that requires the preceding feature plus other (rcp, xtext)
One product composed of the product feature.
So, when you build the product, the P2 repository that is build will be a complete P2 repository will all you need in your product, so you don't need to install manually some features.
Now, let me explain why I have a product feature. If you directly reference various features in your product, then there is no way to specify versions constraints on those features in your product first, and also there is a strong relation between your product and the features it is composed of that will prevent to update these features independently from the product, which is not what I want.
So having an intermediate feature allowed me to specifiy version constraints at the product feature level.