You can stick both sets of code that you mentioned in your top-level .htaccess file but I don't think that you can shorten the two into one function (except for removing one instance of "RewriteEngine on").
As for subdirectories, I think you'll have to put an .htaccess file in each of them with similar code to what you already use, but specific to that directory, e.g.
Options +FollowSymlinks rewriteengine on rewriterule ^subdirectory/(.+)\.html$ http://www.mydomain.com/subdirectory/$1.php [r=301,nc]
Options +FollowSymlinks rewriteengine on rewriterule ^(.+)\.html$ [mydomain.com...] [r=301,nc]
would change all html's into php's. For example I have a link from my main page to [mydomain.com...] which also gets changed into [mydomain.com...] This is what I have to avoid since I can't yet change the html files in some of my subdirectories.