Yes, I understand why questions are closed. I don't agree with many of the reasons for closing, but that's another issue. In any case, despite the somewhat-helpful information provided to the asker, being on the receiving end of the closing process is like being kicked in the stomach, especially when the asker has tried very hard to follow the rules.
There must be a better, more humane way of doing this.
For example, when a question is closed as off-topic, provide some possible alternatives. Point to another StackExchange site, or some other resource, that might be a better fit.
Provide some mechanism to dispute a question being closed. I've had at least one questionone question closed where the stated reason just made no sense, but I had no recourse.
Whenever this happens, I'm slightly less likely to use or recommend Superuser in the future. And I'm sure I'm not the only person who feels that way. Keep in mind that I've contributed fairly substantially to the site in the past. The danger is that eventually you'll push away the people that you really need to keep around.