You are right: before deleting the application, you need to empty the application account.
There is no way to recover the funds/assets after deletion of the application, if you don’t do it.
You can do it via inner transactions during the delete application transaction too, if you want.
It does not need to be a separate transaction.
To close completely the account, you need to send a “close” transaction for each asset and then for the Algos, that is you need to specify the AssetCloseTo
and CloseRemainderTo
fields respectively.
See Algos and assets - Algorand Developer Portal