In ZF2 the "application" is just a container for modules. The modules themselves are what implement the application's functionality. For instance, in the Zf2SkeletonApplication example the application's functionality (excluding assets like CSS, images, and javascript) is contained within a module called "application".
When a ZF2 project loads, all of the modules declared in application.config.php are initialized and their configurations (including routing) are merged into the parent application configuration.
Two main things determine the majority of what code gets executed when an application runs:
- The module initialization contained in each module's
Module.php file (example from the Zf2 Skeleton). This initialization code defines the module's configuration paths, autoloading, and event handling. The initialization code needs to be as light-weight as possible for performance purposes. - The routing itself defines the entry points for the majority of the rest of execution: which controllers get executed in which module. The controllers then determine much regarding what other code gets run, whether libraries provided by other modules will be run, etc.
For simplicity's sake, I have left out some of the intricacies, but this is a good general overview.
A tutorial like the ZF2 Getting Started Tutorial is quite valuable for learning the basics.
EDIT: I should note, "application level routing" is modified at the "module level", since the configs are all merged and the modules themselves implement the application.