Legacy.
Originally, JavaScriptObject were opaque handles, there was no "overlay types". So DOM directly called DOMImpl (or DOMImplIE6, DOMImplMozilla, etc. using deferred binding). Then overlay types were introduced, and the com.google.gwt.dom.*, so part of DOMImpl were moved there, and DOM was changed to call the element's methods (so it doesn't directly depends on com.google.gwt.dom.client.impl.*)