GPL can be considered too free, forcing to to release your source code when you don't want to. This may not be desirable for some people, especially some companies, so they prefer non-GPL software.
A real application of this is using a GPL piece of software in a much larger project (like a library). This would mean you would have to release the entire project as GPL, even if you don't want to release other parts as GPL. This is where things like LGPL and dual-licensing can come in, allowing you the 'freedom' to release your code with the license you want.
If you contribute to an open-source project, your code is already released. What GPL prevents is a competitor using your code released as open-source and turning it into a competing proprietary product. Apache licenses allow that. if you fear your competitors may use your code, contributing to an Apache-licensed project is infinitely worse because then your competitors are allowed to derive their work from your contributions and never share back, something GPL would prevent.
It also prevents YOU from extending the product in some way, embedding it in your proprietary stuff, and then keeping the extensions you wrote secret from the rest of the world. Now, ME, I wouldn't be interested in keeping my extensions secret, because I don't really have anything to hide. But some folks, especially big companies, DO have something to hide. Perhaps, (not a real example) they mean to release a tablet with office software built in, but with a back-door built into the office software that allows it to secretly track all documents created and report back to the mother-ship. At least I HOPE that's not a real example.
Actually that is not true. If you don't give someone the binary, you don't have to give the source.
So you can, if you want, sell the binary to select people (and ask them nicely not to give it to anyone else), and you only have to give the source to those select people, but not to anyone else.
The GPL does not require public source, only that the source follows the binary.
Or you can turn your product into a web application which you host, and ignore the GPL entirely if it's not the Affero version. The same might apply if you have a small client binary which you distribute the code to, but keep the server code (based on a GPL project) secret.
A real application of this is using a GPL piece of software in a much larger project (like a library). This would mean you would have to release the entire project as GPL, even if you don't want to release other parts as GPL. This is where things like LGPL and dual-licensing can come in, allowing you the 'freedom' to release your code with the license you want.