Why isn't this implemented in Bitcoin Core wallet
It is, and many wallets do use a new keypair for every single transaction. New keys and their addresses are generated every time you get an address to receive Bitcoin. New keys and addresses are generate for every time a change output is needed.
In fact, the only wallets that don't are poorly written wallets that people should not use. Every major wallet software available uses new addresses for change and for receiving.
In electrum wallet the default is to use 1 receiving address. Although multiple addresses are generated when I initially create a wallet, they are never used (not even for change) unless I specifically transfer funds to them. I don't know why.
Is electrum a bad implementation?