?
Was kommunzieren die Elternklassen miteinander? Darf es sowieso nur immer passende "Pärchen" geben (BetterContainer mit BetterDialog, AnotherBetterContainer mit AnotherBetterDialog) geben? Falls ja, könntest Du auch aus Container und Dialog ein Template machen und brauchst gar keine Vererbung einsetzen.
Zu Deiner anderen Frage, ob der Anwender Schuld sei, wenn er nicht darauf achtet addDialog immer an den abgeleiteten Versionen aufzurufen: Nein, ich denke er wäre nicht Schuld. IMHO ist es ein elemantares Feature von Vererbung, dass sowas korrekt funktionieren sollte. Jeder, der es vielleicht doch übersieht, würde vermutlich lange damit zubringen, den "Bug" zu suchen und Dich hinterher verfluchen.