I barely tread water at this point as it hits the limits of my understanding of the object oriented model, but I'll offer this:
When I subclass a module, add some capability but then want all the parent's accessors available, I use AUTOLOAD. See Net::Telnet::Cisco source for an example - note it's not my module, but I've used that example in some of my stuff.
When I create my own stuff and the object has a ton of stuff that all needs accessors and they all are pretty much the same save for the key/value pair, I create them programmaticly. See Cisco::SNMP source for example, specifically the _mk_accessors_*() subs and how they're called from the sub modules (Cisco::SNMP::*)