Your MXML for LabeledTile has Label1 as a child element in MXML. When you subclass that class using MXML (<components:LabeledTile ...) then whatever child elements you put in that subclass will replace what you had declared in the LabeledTile.
Sounds like what you want to do is subclass SkinnableContainer to have a label skin part and move your label into the skin. That way when you add child elements to your container it won't replace the label with your child elements.
This article is a good start to learn about spark skinning: http://www.adobe.com/devnet/flex/articles/flex4_skinning.html
If you follow the approach above then here are some answers to your specific questions:
So, should I have one subclass of Tile with optional subcomponents? And how would I do that?
>> You could make the Label an optional skin part so if someone didnt want the Label to show up then they would create a custom skin that didn't include it. Another approach would be to consider exposing a showLabel property on your component that would control the visibility of the Label skin part.
Should I be putting more of this in TileSkin? And have the alternate components be states in the skin?
>> Yes move the Label to the skin. You could use states or expose a showLabel property as I mentioned above.
Should I have a different skin for each of Tile, LabeledTile, and LabeledTileWithGizmo? Should the second skin inherit from the first skin, and the third from the second?
>> Sounds like you could do this all with one component and one skin by adding another custom skin part for the gizmo. Inheritance via MXML skins is not trivial to implement.
Can I have a skin for a component set styles on a subcomponent (e.g. having a LabeledTile set the fontSize, etc. on the Label subcomponent)? Or is that even possible.
>> Yes you should be able to do that, just call setStyle on the skin part