der Parser weiß ja *eigentlich* noch gar nicht, was ein <li> ist! Und genau das ist auch der Grund, weshalb man HTML/SGML ohne DTD überhaupt nicht gebrauchen kann, es ist nichteinmal möglich das ganze auf Syntaktische Richtigkeit zu prüfen. Bei XML ist auch ohne die DTD zu erkennen, ob die Datei gültig ist, hier bleibt später nur noch die Frage, ob alle angegebenen Attribute ihre Richtigkeit haben.
Ganz und gar nicht, man kann noch nicht einmal mit Kenntnis der DTD endgültig bestimmen, ob das Dokument gültig ist, es gibt viele Einschränkungen, die dort nicht ausgesprochen werden können. Ohne DTD kann man nur Wohlgeformtheit feststellen, das geht bei SGML nicht, aber Wohlgeformtheit bringt dir nichts.
<p> ist genauso ein Kandidat: Wenn eines kommt, ist vorher einfach </p> anzunehmen.
Da hat sich wohl ein "sobald etwas auftaucht, was nicht in einem <p> sein darf" eingebürgert - also bei dem nächsten Block-Element.
Was sich "eingebürgert" hat, ist irrelevant, es ist fest vorgeschrieben, wie der Parser sich zu verhalten hat.
Imho ist auch eine der wichtigen Neuerungen an XHTML, dass es klare Regeln gibt, wie mit ungültigem Code umzugehen ist.
Und das war bei HTML nicht so?
Ich bin auch der Meinung, dass sämtliche "depend on Useragent" aus den W3C-Standards verschwinden müssen, es wird einfach immer irgendeine Inkompatibilität geben, wo Annahmen durch die Seitengestalter mal ganz abgesehen.
Das ist nicht durchsetzbar und manchmal auch nicht sinnvoll.