These headers should only include general functionality, i.e. base classes and factory methods. Users working directly with derived types can include the relevant headers directly. Deprecate some top-level headers which are not really useful.
Use the implementation of StoichSubstanceSSTP (descended from SingleSpeciesTP) but change the name to StoichSubstance.