Hi,
yes, you need a new pair of glasses. Or we need a better documentation. Or both :)
First the good part: you mostly did understand what GlobalRouting and StaticRouting do.
The bad part is that you misunderstood how the two are related. the answer is: they aren't related at all, GlobalRouting doesn't rely on StaticRouting.
This is somewhat counterintuitive (at first): each protocol has its own routing table, and they update them independently. If there are two conflicting entries (it could happen), the resolution is done at a higher level. However, first things first... ListRouting.
In ns-3 the IP layer (v4 or v6) has a routing protocol. Just one, mind. However, that going protocol can be the ListRouting. In this case the ListRouting is responsible for asking the various routing protocols in its list (it's ListRouting) if they have an entry for the packet. The list is organized as a priority list, and the protocol with the highest priority wins. The next protocol is called only if the previous protocol doesn't know how to route a packet (i.e., it would have dropped the packet).
As a consequence, you usually install GlobalRouting *and* StaticRouting, with Static having an higher precedence over Global. In this way, you can inject "exceptions" in Static.
And now about the APIs you missed. You missed them because they're not there. The only APIs you must override are the ones in Ipv[4,6]RoutingProtocol. Basically RouteInput, RouteOutput and some other obvious ones. How you fill your routing table is completely left to your own design and functions.
For an example of possible designs, check AODV, DSR, OLSR, RIPng, etc. All are in the respective modules except for RiPng, that is so small that we placed it in the Internet module. All of the, of course, are dynamic and based only on 1-hop available informations (or data rebroadcasted from 1-hop neighbors).
Hope this helps,
T.