Using this constant threat of replacement -- "there's someone waiting to take your job and happy to do it for less if you complain" -- management can hold back wages and take advantage of employees. Hence, the union fights for things like standardized salaries and tenure and so on.
Good developers/engineers aren't easily replaceable. As much as outsourcers and body shops want managers to believe you can just tell any developer what to do build and you will always get the same result, we all know that one bad developer can ruin a project and a great developer is often worth way more than 10 mediocre ones.
So as long as developers are being valued individually for the skills they bring to an organization, it's better for them to negotiate individually rather than bargain collectively.