C'est vrai que les listes de définition sont séduisantes pour marquer un dialogue. Car structurellement elles fonctionnent sur un couple binaire personnage (dt) / propos (dd). Et puis le retrait négatif généré sur la réplique (dd) dans un affichage sans feuille de style n'a rien pour déplaire. Mais c'est vrai aussi que ce faisant, on écorche la valeur sémantique de ces balises : les propos que prononcent un personnage (dd) ne sont jamais la définition ou l'explicitation du nom de ce même personnage (dt).
Je trouve qu'un simple paragraphe peut convenir, surtout si l'on prend le soin de mettre les noms des personnages en majuscules, comme c'est systématiquement l'usage dans les textes de théâtre imprimés. Le paragraphe correspond bien, sémantiquement, à l'unité de sens que représente une tirade dans un texte littéraire comme un texte de théâtre.
Ce qui, structurellement, peut rester intéressant, c'est aussi de conserver une distinction personnage / propos à l'intérieur de chaque paragraphe, comme le suggère Laurent, en utilisant des spans. Et dans ce cas, si l'on ne souhaite pas que le fameux tiret soit "en dur" dans la page et donc lu par les lecteurs d'écran, on peut avoir recours au before: dans la css pour l'afficher dans les navigateurs graphiques (qui supportent before: bien sûr ;-)
On réservera dans tous les cas la balise em aux didascalies (ou indications scéniques), car il me semble indispensable qu'elles puissent être différenciées des propos tenus apr les personnages y compris dans un affichage sans feuille de style ou un navigateur textuel (em est mis en couleur dans Lynx). Ca pourrait donner, par exemple :
<p>
<span class="locuteur">SILVIA, <em>à part</em></span>
<span class="propos">Ah ! Le vilain homme ! <em>(Haut.)</em> Madame, je vous assure que cela est pressé</span>
</p>
Marivaux, Le Jeu de l'amour et du hasard, Acte II, schène VI