Yes, a union is pretty much a corporation that supplies labor. The biggest difference is how they're governed. Nobody bats an eye if a supplier negotiates an exclusive contract.
Seniority rules are something unions negotiate for. Contracting firms stick warm bodies on projects all the time. That's between the supplier and the customer, not imposed by the federal government.
I agree it would be better to fix that, but as you said, it's a stretch. Good luck getting Republicans or Democrats to go for it.
They get around that by structuring all of the benefits in the employment contracts to cover only their members, and by negotiating exclusive employment contracts with employers (so that there are no non-members).
Put another way, 94% of people who are represented by an NLRB-governed union never had the opportunity to vote for or against union membership in the first place. Most of those are employed by employers with exclusive contracts ("closed shop"), and because the union itself is not required to stand for reelection (its representatives are, but the union basically guaranteed permanent representation[0]), it means that free-riders are a non-issue.
[0] The process of decertifying or deauthorizing a union is very strictly regulated and unions have very broad leeway in preventing it, so it almost never happens except in cases of criminal misconduct and the like.
I think you're conflating open shops and right-to-work laws, but besides that, the point is that there is no free rider problem even in states with right-to-work laws, because the union can structure their contracts with the employer so that non-members don't receive any benefits. Sure, they'll represent non-members, but there aren't any reasons the non-members would ever need them to, because the benefits literally would not apply in the first place.
Unions don't really talk about this, because the free-rider problem is a convincing argument to use in favor of mandatory dues withholding, but in reality it's an issue that they already have the tools to avoid.