Your wife is going to have to make a decision. There are three ways this can go. 1) She sits it out and waits for her manager to either change his mind or leave the company 2) She goes to HR and says "am I valuable enough to the company that you would rather have me working here in another capacity than working for another firm?" or 3) she just starts looking for another job.
It may very well be that her manager does have enough pull that he can get away with this, or it may be that the stated reason is not the real reason she is not advancing. If they decided she's just not advancing, saying "you're too essential to let go" might be a not particularly subtle appeal to her vanity.
Since it is unlikely that she'll ever know the "real" answer (if the stated one is not truthful) she's going to need to decide how important it is to her to "move up". And if it is important, how important is it to move up in this company? Important enough to risk what might happen if she calls their bluff?
Personally, I wouldn't risk it. It's better to just leave the situation behind. Look at it from her manager's point of view. If she isn't willing to just put his "needs" before her career plans, what would he have to lose in torpedoing her out of spite? He might not be skanky enough to do that but he's already showed himself to be willing to engage in unethical behavior, even if he doesn't think of it that way.
And if she is inclined to just leave things as they are and see what happens, that may be a mistake. In every case that I have personally been aware of, once a person decides they want to leave a position, the relationship they have with coworkers and supervisor/employer changes. Even if they are essential to a position (and nobody is really essential, not even if they invented the product the company is selling) they have suddenly put themselves outside the "trust" barrier. Everyone is aware that they were thinking of leaving and even if they are no longer trying to leave, there's no way to prove that.