Look at the *.h files for the actual API documentation. The documentation below doesn't attempt to list full API documentation.
Mail user contains everything related to a single user.
Mailbox list is used to list/manage a list of mailboxes for a single namespace (1:1 relationship).
Mail storage is used to access mails in a specific location with a specific mailbox format. Multiple namespaces can point to the same storage. A single namespace may in future (but not currently) point to multiple storages (e.g. a mixed mbox and Maildir directory).
Mailbox is used to access a specific mailbox in a storage.
Mail is used to access a specific mail in a mailbox.