"How is a Struts subproject created?"
There is no formal application process, but the best idea might be to submit a proposal, like the ones for Apache Incubator projects, to the Struts PMC via the Struts Dev list.
Struts, like the ASF itself, does not consider itself a home for fledging codebases. There are other places, like SourceForge, where new projects can be created and communities built. Once a product is maturing, and has a strong following, its developers may wish to apply to Struts to give the package a longterm home. Struts, like the ASF, is a place where we expect codebases to outlive the participation of their creators.
"Most subprojects are related to Struts Classics. Others, like Shale, are not. Why is that?"
Bacause Struts isn't a product, it's a community.
The question isn't whether codebases share a hierarchy. The question is whether codebases share a community of developers.
The Struts PMC feels that Shale and Struts Classic share a common development community. So, the PMC decided to create a Struts Shale subproject.
And how did the Struts PMC get the right to make that decision?
The old fashioned way: They earned it.