As far as I understand it, it is the difference between messaging and inheritance. With inheritance, all descendants of TNode fit in an "array of TNode", but are thereafter treated like that by the compiler, unless you cast them to another type. It is up to the calling function to know that class type.
While with messaging, you send the instance a message and it sees if it can handle it (has a new field or method for that). If it doesn't, it sends the message to its parent and/or superclass, depending. In that case, they don't even have to have the same ancestor, only a compatible message handler. (Which probably IS that common ancestor.)
I can remember I implemented a hybrid of that, long ago, before classes were a thing. With linked lists. I don't know if I used strings or some kind of enumeration, but I would check the method index (VTable) of that instance to see if it could do that. Same with fields.
At the other hand, there are the classes that provide methods that require a minimum descendant level ("InheritsFrom(TTypedNode)" instead of "is TNode"), like the serializers.
Generics don't really fit this mold, because they require a container and have a fixed type as well. You still need your code to handle all cases. It just saves you the trouble of making a separate class for each case and overriding those methods in all descendants.
I made something like this in an early version of C#, when ".docx" appeared. It had the same problems, so I made a whole new base class (like TObject) and class hierarchy, that allowed "lazy typing" and serialization/deserialization as well. That heavily depended on Reflection, the .NET RTTI variant. I should probably do that here as well.
Web APIs aren't as complex as a docx document, but about as standardized as the components of that
Interesting enough, this is the same problem you see in a lot of web frameworks and micro-services, where the URL is parsed as function names and parameters. Most often in scripting-languages, or at least ones that don't have strict types and full-blown classes.
So, now for version 0.3: the RTTI variant.