As someone who has been working for some time with MTools (and my own Webel Abstract Data Type recipe adapted from a technique by Roman Maeder to include inheritance), I'm a bit surprised to learn about this interesting work, I wish I had known about it much earlier (and before making some recent slides about my own work in the area). I see it also uses the TagSetDelayed approach for "methods" I originally found demonstrated by Maeder.
I landed here BTW completely by chance trying to find out about CreateType after seeing it on this WLJS quick start page: Creating a new type, which has a StateMachine example that demonstrates used of state. Because I was already using MTools (which supports state), for my own variant of the TagSetDelayed ADT recipe I decided to make them pure stateless, that is, I have some projects using MTools that permit use of state, and other separate projects that force me to work with a stateless mindset.
I seem to have re-invented or co-invented some things Kirill has also covered (and in some cases more elegantly), but it's a bit late for me to re-jig some of my applications to include Kirill's approach (at least for now).
Kirill, this is super stuff, thanks for posting.