When accessed from the web, objects are found using traversal. Zopache traversal is a bit different from the other packages, but not hugely different. During zopache traversal, templates are acquired from the ZClass or parents.
When accessed from python, objects find each other by acquisition. There are various types of acquisition. Parental acquisition, child acquisition, and cousin acquisition. For historical reasons cousin acquisition is called a ZClass.
Unlike Grok/ZTK, the namespace for Zopache is the url tree. Values are acquired from the ZClass, parent objects, or child objects. Of course, being written in Python, Zopache depends and benefits from the python file system namespace. Being written in Grok and ZTK it depends on the Zope COmponent Architecture.
In Grok, templates are stored in the file system, in each individual package. There is no good way to share them across packages. Indeed the only unfixed Grok bug report that I ever encountered was that templates cannot be shared across packages. In contrast, in Zopache, Templates are stored on the ZODB tree, either near the root in a ZClass, and can be accessed from anywhere.