"The code is extremely simple on one sense - there are primitives coded in very optimized assembler, and then words are just lists of pointers to the primitives - so a program is just long list of addresses to the primitives combined with proper preparation of the stack. On the other hand, words can be created with a dynamic runtime behavior (CREATE DOES>) so very complex things are easy to model (this is why it's a great realtime environment)."

Yep. Smalltalks work somewhat like this - starting low level and aggregating upwards. But Smalltalk works on virtual hardware and the memory itself is an object with behaviors for persistence, compaction, garbage collection, etc.

I think Smalltalk adds higher organizing principles of classes on top of this low level stuff - but this is all implemented in Smalltalk itself and could be implemented in forth - IOW, you don't need to change forth to implement OO in forth - just build the appropriate infrastructure in forth itself.

It doesn't seem like that infrastructure is commonly built though.