Once you get get past the initial handshake, it's pretty much event-driven..with a few exceptions like you noted.
I assume you've already found this:
https://github.com/EQEmu/Server/blob...ent_packet.cpp
On the out-going side..there's really not much coherency. Packet creation could be any where there is access to a data
stream.
To complicate things, we support multiple clients..with each having a chance of added/removed features and different
payload formatting.
If possible, we try to format server data structures to represent one of the clients.
When that's not possible, a 'hybrid' format is usually employed.
As far as documentation..there really is none.
Our wiki (
http://wiki.eqemulator.org/i?M=Wiki) is really setup for user/admin/content developers, not code developers.
This base code has been around for over a decade and most contributors are (have been) part-time volunteers.
If you have specific questions, you can post them in the forums, or hop on irc and see if you can get a response there.