Hooks placements in Drupal
By Default you can consider all hooks can be extendible using custom modules... 

Hook Documentation says


  Hooks are how modules can interact with the core code of Drupal. They
  make it possible for a module to define new urls and pages within the
  site (hook_menu), to add content to pages (hook_block, hook_footer,
  etc.), to set up custom database tables (hook_schema), and more.


In template.php you can override functions which are exposed by hook_theme or functions like theme_*

There exists a good documentation that explains which functions you can override using template.php..