James,
Look at the organization, postal-address, and telecom number packages. These provide a data model to store contact information, addresses and phone numbers. There isn't any user interface to these that I am aware of.
In addition, i built a system to represent a company hierarchy in a simialr way. We have several levels of the company, each was a group.
I created a tree_sortkey similar to that used for acs_objects to represent the group hierarchy. On oracle it could just use connect by.