Anybody can vomit text into a file, rename it ".html", and have it rendered to something by a web browser. When they try the same thing with XHTML, they receive an error page. Even otherwise reasonable programmers, who would not expect invalid code to be parsed by a compiler, blithely contribute to the spread of invalid HTML. For example, the front page of news.yc fails with 143 errors:
A second factor is that IE does not support XHTML. Any features that rely on XHTML support (inline SVG, MathML, custom attributes, &c) are unavailable in a "portable" application. IE 6 is still a very large chunk of the market, especially among non-technical users, so relying on any features it doesn't support is iffy from a business perspective.
The nice thing is, now that HTML5 is being specified, parsers can more easily written that will be able to correctly parse the billions of existing Web pages, which aren't in XML anyway.
goes off to write a html parser for my favourite language(its not ruby or python)