I've got my first real Drupal site working, and I like the way that I can add functionality through the use of hooks. Getting the hang of this, I've begun to use the same method to communicate between my own custom modules, which nicely cuts down on the interdependency between these.
However, currently there is no control over which hooks "fire" - every module gets to fire its hooks. Yes you can undo some of the results with hook_form_alter but (in 4.7) there is no hook_view_alter. This leads to some oddities, like:
(1) Turning taxonomy terms into checkboxes (see e.g. http://drupal.org/node/84286) has to wait until taxonomy has done hook_nodeapi as usual, then write over it.
(2) user.module writes a "History" section to the user view page on hook_user('view'). There's no way to undo this, without hacking user.module, or writing a theme for the page.
(3) ecommerce tries to allow everything to be a pseudo-product. Every time a node is loaded it uses hook_nodeapi to do a SELECT from ec_product just in case it might be a pseudo-product, wasting db calls. I don't use pseudo-products, yet I can't turn it off without hacking ecommerce.
So a proposal:
Could Drupal core include some sort of "meta hook" (hook_hook()?), whose purpose is to allow modules to control the hooks that reach other modules? Or even a permissions system for hooks? Of course turning off hooks selectively could be dangerous, but then so is any new module...