Are there any particular reason why Bitcoin Core uses Berkeley DB & LevelDB while both of them are key-level database? I imagine it's easier to maintain Bitcoin Core source code if only one of the is used.
Bitcoin Core used to only use Berkeley DB. It was replaced by LevelDB for all of the non-wallet things because LevelDB has better performance characteristics. Notably, BDB has this issue with database locks which caused an accidental hard fork in March 2013. At that time, BDB was simply unable to handle blocks over a certain size (the specific size is not quite defined and can vary from machine to machine) while LevelDB was able to just fine.
BDB is still used in the wallet for backwards compatibility reasons. But this is changing with 0.21.
The only thing that users need is the "xprv" value if it is HD wallet or all WIF-encoded private keys if it is not. By having private keys it is possible to recover everything else. Am I missing something? Both things can be easily written on a piece of paper and expressed in text as needed, so they are as "standard" as they could be.
Bitcoin Core doesn't store xprvs. There's also no way to import an xprv. It also doesn't store private keys encoded in WIF, and the way they are stored is not an importable format.
The only way to get any of those things is to be able to understand the wallet.dat format, parse how things are actually stored, and then output them to the user in some other way.
Actually, I think requiring a wallet file that can be moved around in all cases might actually hinder proper research on database backend efficiency.
It is an unfortunate fact of reality. People move wallet files to other machines. People need to make backups of their wallet. The easiest and least corruptable way to do that is to have a wallet that is contained in a single file.
Ideally, database engines would be pluggable in the code, and there would be a database migration tool to switch between engines. Then it suffices to have one engine around that has a fixed wallet file format.
Frankly, a different database engine would not make a significant difference to the performance of the wallet. The database engine is barely used as a database engine, moreso as a data storage method rather than any actual database stuff. Everything that is stored on disk is loaded into memory and the wallet works entirely off of the in-memory data, not the data in the wallet file.
The place where a using different database engines makes sense is for everything else - the UTXO set and all of the indices. However the work required to do that is immense and none of the active developers care enough about that since clearly LevelDB is good enough and there are tons of other things to be worked on.