In most white-collar roles, "advancement" is synonymous with "going into management", and software development is no different.
2. Management is not automatically higher-paying than development, until you get into the higher reaches of management, which not everyone will.
3. To the extent people are flatlining, it might just be a case of starting high; if you're hitting a wall with a number that's in the top 5% of individual income nationally, well, you're doing better than 95% of people out there, so consider that it might not be so bad after all.
Growth slows down as you get older and more experienced, not everyone can grow beyond some level. A company isn't going to keep giving big raises to someone who isn't growing that much anymore. That seems fair.
Worst case for most people is that they hit a reasonably high wage quickly and can stay there for a long time, even if the increases become modest at best. That's a good thing.
If you are willing to develop the skillset you can still move into management and continue to increase your earning power. That's good too.
It does suck to think that as a mid level engineer I'll most likely get to a senior level in a few years and rise no further, but it's just something you have to get over.