I don't know of a better way. I take the same view that you describe: that the interest portion of the payment should be attributed as an Expense, principal as paying down a Liability, and any escrow taken out for the mortgage company to pay taxes+insurance on your behalf as adding to an Asset account.
Some day I was thinking of writing a beancount plugin that does this split automatically based on the standard amortization schedule, but it's low on my list. It would be a pretty easy plugin I think. A fava extension doesn't seem like the right tool for this - I haven't used those but it seems like their role is to give you ways to display data in your ledger, rather than actually mutating the ledger as proposed here. You could even have the plugin automatically insert the transactions using just the plugin configuration.
For example, this could be all the user has to input:
plugin "your_cool_plugins.mortgage" "{ 'transaction_day_of_month' : 1,
'start_date' : '2010-01-01',
'principal_and_interest_amt': 1000 USD,
'interest_rate_pct': 4.25,
'escrow_amt': 200 USD,
}"
Then the plugin can generate a transaction every month between `start_date` and today().
As for plugin examples, there are several great plugin authors in our community. See
here, and
here (and there are lots more out there).