I'm not sure but I suspect the DOM is the reason small browser implementations can't catch up. I think over the years specifying interactions with JavaScript and CSS have led to ambiguities in the standard and undefined behavior.
The difficulty of implementing the Web platform comes from many things, from the difficulty of implementing JS to the complexity of the DOM to how subtle CSS is to complex, far-reaching APIs like ServiceWorker and WebGL to unspecified behavior depended on by sites. There is no one reason.
I will say that the DOM is one of the better-specified areas of the Web platform. CSS 2.1, for example, is significantly worse. And the table layout specifications are in a miserable state (one of the reasons why it drives me crazy when people suggest going back to table layout for "simplicity").