To add to that last point, I worked for a company (at retail) that claimed to know that keeping customers was cheaper than getting new ones, and corporate even implemented a policy where the clerks on the floor had up to $100 to keep a customer happy. I never once saw that $100 used, and the one time I tried to keep a customer (who had just spent $3000) happy, management refused to let him return a crap $100 printer because he didn’t have the manual in the box. He had left it at home, and was glad to bring it in next time he was in. Nope. And that incident was within a week of implementing that system.
So even when a company understands that point, it’s still really hard to make good on it at the levels that it can matter.
Companies won’t hire someone that’s overqualified because the employee is very, very likely to leave again soon. It costs the company a ton of money and headache for very little benefit.