This lets us store out as much information as possible using the basic RDF constructs, while not losing information within Protege. Subproperties are confusing. The idea itself is reasonable. In general, it's not clear what problems sub-properties solve. If we assume that subproperties narrow ranges and domains, then they do give us more precision.
Protege has a flat property space.
It'd be really nice to have finer-grained Primitive types, not just literals. This has been discussed to death. Literal and then store the precise type of the literal in a facet. It's a class. When we import RDF, we translate ranges of type Literal to the Protege primitive type string.