Question: I'm wondering why some people release software as freeware, yet they don't release the source code. Why is that? I can think of some reasons, yet most of them don't make very much sense. Why would you want to keep the source closed but let the program be freely available (free of charge, not free as in freedom)?

Answer: 
One I don't see here yet - because the source code has value in itself, separate from the application as a whole.

If you have useful libraries that you've written, you're likely to use them even in projects that you intend to give away. That doesn't mean you're willing to give that library source code away. And without those libraries, the rest of the source code is probably worthless.

If you give away library source code that you've developed over a period of years, you're giving a competitive advantage away - very likely to your competitors.

One thing that I think is often relevant, though - that code probably includes libraries that have had time, effort and even emotions invested in them over a period of years. It would be like inviting thousands of people to read our diaries.
I provide open source code as sort of a community service idea, and as a portfolio idea. 

If I was selling software directly - I don't, I'm employed in a position where the company sells the product, not me - I would *more* than happy to sell my software as closed source. Allowing competitors to look over my code and reduce my competitive advantage is not in my best interest, as a rule.

Put another way, I do not consider releasing software as open source to be a moral imperative.