A few thoughts here.
The GPL doesn't force you to distribute your source code unless you've distributed a derived work (ie: binary executable).
In other words when you distribute anything based on the GPL, you distribute ALL of your work, holding nothing back.
Its still your right to not distribute anything
To give a further example.
If I've built some killer utility application, and I decide I want to licence it under the GPL I can.
A friend comes to be, lets call him Adam, and he asks for the software, since he's a friend I give it to him. I can even SELL the distribution to him.
Its now his copy to use and redistribute as he likes, under the restrictions of the GPL. (He can even redistribute it for free or for more if he likes)
Later tosspot Bob comes along from a competitor's company and decides he needs it, and asks for it. I can refuse to distribute to him.
He can ask my friend Adam, and Adam can choose to distribute or not.
In this case, since no one has distributed to Bob, he has no recourse for acquiring the source code or even derived works. He can't demand it from either of us since we never distributed to him in the first place.
If he steals the code/binaries from Bob its copyright infringement, as he was never given a licence to use the software from anyone.
Now if you understand that you only need to supply source code to those you've distributed to, the fact that you can be restricted from distributing to places and people has little effect on the integrity of the GPL.
If you can't release source code to Cuba, you can't release anything to Cuba, the GPL forbids it. But that does not invalidate or contradict the licence in any form or way.
Probably the biggest misconception with the GPL is that people think once its licensed under the GPL you have no control over who you distribute it to. That's just not the case, you can distribute nothing, or everything. There is no in-between however.