So what's the difference between saving your .dat and exporting the keys?
As they both simply save your btc balance?
wallet is folder of addresses,
A wallet is a collection of addresses
AND the private keys necessary to spend the bitcoins received at those addresses.
They may be in a folder, a file, a database, written on paper, memorized, or any other form.
Most wallet software also provide features to determine the spendable balance that the private keys have control over, as well as features to create transactions to send bitcoins to others.
some wallets can "pre-calculate" addresses (they're called Deterministic wallet)
No. Deterministic wallets do not need to "pre-calculate" addresses. The addresses are all formed from a single seed value using a mathematical formula. As long as you know (or the software is programed with) that formula, you can re-generate the entire list of addresses from the seed value in the future. This means that those wallets can access the entire balance as long as you have backed up the seed value.
Wallets like the current version of Bitcoin Core are
NOT "deterministic". These wallets generate addresses entirely randomly, making it impossible to regenerate the same address in the future unless you have a backup of the completely random private key that was used to create the address. Because Bitcoin Core is not deterministic, it "pre-generates" 100 addresses (with the default setting) and stores them (along with their private keys) in the wallet.dat file. This way, you can recover your entire balance from the wallet.dat file as long as you created the backup recently enough.