In no case is either an impossible approach and these options are not 100% clear cut. There is more than one way to skin a cat, and having different options gives you greater freedom when designing your application.
When you've logic that is specific to your application and relatively local in how it works, then you are probably better off putting it in global.asax. It is more likely to need to be changed due to changes in the rest of the application, rather than overall improvements to your entire process.
When you've logic you want done in multiple applications on errors, then you are probably better off putting it in a module. It is more likely to need to be changed due to changes to your overall process, rather than specific to that application.
If you want behaviour to be "pluggable" without recompiling, then you need to do it in a module. However, there are other means by which functionality can be turned on or off without recompiling (configuration settings), so even this isn't cut-and-dried.