Is it possible for a freelance programmer to use Open Source products under GNU Public License and make money given that he cannot stop his customers from freely distributing his products?
IANAL (I am not a lawyer): Freelancing and GPL are very compatible -- if the client is a company that wants something done, rather than a product they can sell, the fact that it is GPL is actually a bonus. It clearly establishes the copyright situation.
It can also be used effectively when what you are selling is a service. Only when you are developing something that is going resold to others would the GPL be a possible obstacle.
When you are freelancing, copyright usually reverts to the company for which you are doing the work. Which means that you need to clear your use of GPL'd code with them, as they will have to comply with it when distributing their product.
If you retain all rights to your software, you would be selling a license to use your product to your customer(s) and that license needs to be compatible with the licenses of whatever libraries you used to create the product. Your customer needs to accept that license and make their customers accept it as well when the license you sold to them included re-distribution rights.
TL DR: when you use GPL'd code to create software for a customer, you need to make your customer aware of the consequences and they need to accept those consequences. If they are not willing to accept the consequences of GPL'd code, you should not use any GPL'd code in the solution you are building for them.
What the other answers have not touched upon: There is a huge difference between using a GPL library in your product or using a GPL tool in your toolchain to build the product.
If you just use a GPL editor or compiler (or other tool) to create your product, then this has no influence whatever on the licenses you can use for your product. It is perfectly well possible to use a GPL editor or other tool (such as GCC or Make) to create a closed-source application and you will not be violating any license terms in doing so.
If you use a GPL library in your product, or in some other way incorporate GPL code in the product, then you need to apply the GPL license to your code as well. Note that this situation can also occur if you use a tool that generates code for you.
As for making money from GPL software, the GPL does not forbid this so you are perfectly within your rights to charge a customer for the code you write for them or the maintenance you perform afterwards. You can't forbid the customer from giving the source away, but then, why would they if they paid hard-earned cash for it themselves?
@jmoreno's answer is spot on. And another good thing about GPL (or open source in general) is that it frees you from worrying about what the customer might do with your "proprietary" code after you have moved on to the next job. If you've given it to them, you don't need to worry about them stealing it.
However, if you are concerned about them attempting to resell it (in some form), then you may need to keep an eye out for signs that this has happened. Depending on how they did that, it could be a breach of the GPL (and your copyright) and potential grounds to sue them.
But if you simply don't care about that (and you are happy for them to try to make a buck from "your" code) then maybe something like the Bsd or Apache licenses would be more appropriate.
But note that you need to deal with these issues at the point where you sign the initial agreement with your client. They need to sign off on you releasing the relevant part of your work for them under the GPL ... and on who will own the copyright. You can only release something as GPL (or under some other open source license) if you actually own the copyright. And the fact that you wrote it doesn't necessarily mean that you do. (In some legal jurisdictions, the entity that is paying the bills for the work may own the copyright on work product ... by default.)