Mac OS X does not store a bitmap for every widget, that's iOS's architecture. It stores a bitmap for every window. Having a layer (GPU-stored bitmap) was only introduced once CoreAnimation was ported to OS X. It was and is optional.
OS X Views also have a -drawRect: method that works the same way.
In fact that's how MVC works. See http://blog.metaobject.com/2015/04/model-widget-controller-m...
And react and frameworks like it just duplicated this, see http://blog.metaobject.com/2015/04/reactnative-isn.html In fact, when I first read about react (non-native), my first thought was "hey, finally they came up with a good equivalent of NSView + drawRect:
You could easily have a "graphics context" that accepts high-level objects, or a variant of drawRect: that creates subviews and then tells those subviews to draw themselves.
I don't see this as being fundamentally/structurally different, though there is a slight difference in the implementation.