La ignoro nelle due classi e applico il catch solo alla fine?
Sì. Il catch funziona come una rete: dove lo inserisci cattura tutte le eccezioni sotto lanciate.

se per caso anche ClasseA e/o ClasseB lanciassero eccezioni a loro volta queste andrebbero a sovrascriversi, da quanto ho capito e testato. Se queste premesse sono vere (potrei sbagliarmi nel modo più assoluto ) l'unica cosa fattibile sarebbe farle rimbalzare con un costrutto try-catch-throw fino al livello più alto, mantenendole sempre distinte. Oppure non ho capito nulla?
A meno che tu non lavori in ambiente multi thread, l'applicazione lancerà sempre e solo un'eccezione alla volta.
Questo signficia che se funzione lancia un'eccezione, l'interprete risalirà tutta la pila di esecuzione alla ricerca di qualcuno che possa gestirla. Se A o B non lo sanno fare, allora verranno semplicmente saltati.

Nè A ne B possono lanciare a loro volta una eccezione, a meno che non eseguano un catch ed un nuovo throw.

in altre parole vorrei "catcharla" nel livello più alto possibile, quello in cui c'è anche l'html: come fare?
Ti sconsiglio questo approccio.
Normalmente la logica deve stare all'esterno dell'HTML. In teoria dovresti gestirla ad un livello superiore, il gestore deciderà poi quale elemento HTML richiamare a seconda che l'eccezione sia stata sollevata o meno.