I think that in the early days there was one way to form a hierarchy, that was using the parent property. At various times community members wanted to add setParent and addChild to some objects but did not necessarily add them to all objects with parent property. Also at some point some properties were re-coded as accessors.
Often a ‘non-visual’ parent was formed from an empty mesh and then later a transformNode was added as a lighter way of having a ‘non-visual’ parent.
You can see which objects just have properties and accessors for parent/child relationships and which have added methods to form parent/child relationships by checking out the API, for example
Hope that helps.