The hook is meant to support different types of application for the same code. When you develop with ArcGIS desktop, you register your components (ESRIRegAsm.) That places a reference to the component you developed in the registry in a category. There are many categories, some apply only to arcmap, others apply to ArcMap, Globe, Catalog, Engine, etc. When any of these applications start up, they read the registry to see which components apply to it. At various other times components are read from the registry and created. For a command or and extension, that is when the oncreate will be called by the ArcMap application. In your development, you need to be able to get a reference to the ArcMap application or to the map, this is what the hook is for, it allows you to get a handle or hook into the application that created the component.
A command for example could be registered to work in any ArcGIS application. In that case, when the ICommand.OnCreate is invoked, any of these applications or hooks could be passed into to the command. You need to be able to handle the different possibilities, the hookhelper is a generic way to handle any type of application, it applies to all of them.