Your website development partner
Drupal Data Model
Setup: 07-May-2013 
With lots of software dev experience, but little Drupal experience, here's my take:
The assembled collection of render arrays, culminating in $page, is a classic Data Model consisting of (as we know) nested arrays. Each of these nested arrays is an Abstract Data Type often (but not always) identified by its "#type" property. Each abstract data type consists of properties ("#"-prefixed) and data (non-"#"-prefixed).
In a more general sense, I see Drupal as a dispatch-driven state change machine with a service-oriented architecture. The state change machine through its service calls to modules (aka "hooks") alters (parts of) the data model in progressive stages through the life cycle of a website request, until the data structure conforms to a renderable structure - hence the name "renderable". But it's important to note that some of the data doesn't start out as renderable. For an example, follow the stages of transformation of $user data to user->content and finally the &$build (renderable) structure.