Nun ja, du kannst bei RewriteCond prüfen, ob eine Datei existiert: -f. Also schaust du, ob die angefragte URL existiert. Falls ja, ist das Rewrite beendet. Wenn nein, prüfst du, ob die URL mit einem zusätzlichen .html existiert und wenn ja, schreibst du sie um. Falls nein, prüfst du wieder, ob die URL mit einem zusätzlichen .php existiert. Wenn ja, schreibst du sie um. Wenn nein -> 404.
Und ja, du kannst alle deine Links ändern, sodass .php und .html nicht mehr darin vorkommt. Das wirst du wohl aber von Hand machen müssen - bzw. mit einem Editor deiner Wahl. Beachte auch, dass die direkte Eingabe der URLs *mit* .php oder .html am Ende noch immer geht! Die Urls werden quasi nur "zusätzlich ohne" angeboten, sie werden damit nicht blockiert oder irgendwas. Du kannst zwar eine Rewrite-Rule einfügen, die Eingabe von *.html oder *.php URLs zu einer 404-Seite umleitet, aber ob das cool ist... na ja.
Lektüre, die eventuell hilfreich ist:
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html