You might be interested in trying out Nitrogen[1] first. Zotonic builds on it, but picks a lot of the tools for you, so you might be interested in the basic approach first, especially if you're learning the language.
Every module is a completely independent gen_server, allowing you to add whatever functionality you want.
Zotonic also uses standard Webmachine resources, when you want then you can skip all functionality of Zotonic and just add whatever code you want to add or experiment with.
Or go even more basic...