At first, I thought about adding javascript support to WWW::Mechanize using JavaScript::SpiderMonkey. It sounds nice in principle, because JS::SM is the javascript interpreter used by Mozilla. However, in fact it's only the raw interpreter, lacking any browser objects (window, document, etc.) or DOM initialization. After looking at several W3 specifications and HTML::TreeBuilder, I decided to pass on trying to implement the DOM myself.
You are absolutely correct, the DOM is the missing part. And even if it was implemented in some form, it would be a very special DOM, not reflecting all the myriads of browser bugs, which are accepted 'features' now.
If you really want to test a web application, you need to test it with all the browsers you're supporting.
There is, however, the benefit of having an automated regression test, even it it's only for a special (maybe limited) DOM implementation. So far, no one has tackled the task to my knowledge.