I've been using Http Modules for a while, though I hadn't had a need to build an HTTP handler yet. An Http handler is needed when a specific file or set of files needs to be managed in a specific way. For instance, aspx files have an Http handler devoted to them. Essentially, anytime you want a certain file or files to be handled in a way other than using the normal Page event processes, you need to create an Http handler. If you remember IIS ISAPI extensions, well, Http handlers are the .NET way of implementing them, without having to directly attach ISAPI processes to IIS.
An Http module, on the other hand, is used when you want to add extra functionality to any page requested and responded to. In DotNetNuke, there had been an issue until 3.x with creating URLs that were search page 'friendly'. Google and other search engines don't deal at all with pages with the same page name and different paramaters passed in. For instance, an URL like the following:
http://www.ewriters.org/default.aspx?page_id=44&etc
will not be crawled correctly. So the core team came up with a way to build 'friendly urls', that would turn the above URL into something that looks like this:
http://www.ewriters.org/44/etc/default.aspx
They accomplished this by interrupting the page process via an Http module and rewriting the URL to display in a more crawler friendly manner. The addition to the web.config file, for DotNetNuke at least, looks like the following:
<add name="UrlRewrite" type="DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules.UrlRewrite"/>
You could also implement an Http module to do a better job of page and visitor tracking than one can get from the IIS logs (we're working on this right now). If you're familiar with ISAPI filters, well, Http modules are the same thing.
The important thing to remember is the difference between how Http handlers and modules are processed. An Http handler is woken up when a specific file or type of file is requested from a web server, and will call all Http modules specified in the web.config and machine.config files for any 'filtering' that is required. All Http modules will be called for any requested page, while only one Http handler would ever be used per page.