isn't there a way to extend the types to specify our own and register constructors for them? like transit?

otherwise we will be in the same place of json in terms of extension where our own types are second class citizens.

Agreed. Just adding some fixed types doesn't really help that much.

Something like EDN for JSON would be cool: https://github.com/edn-format/edn