James said it best in the slides he just posted: "Users aren't stupid. They're ignorant. That's largely our fault". There have been many times I wanted to just say "Stupid user, I can't do that. Don't you know that?" When, of course, they couldn't possibly know because I had never told them so before.
That reminds me of a project I worked on earlier this year. It was a relatively simple web application. Just some forms and a bit of logic to display/save data. But the users were completely amazed at what I could do, and how fast I could do it. To me, it was all simple things. Like throwing some more data on the page, or massaging a SQL query, or having a "printable" report format. But I guess they were used to other people's code, which apparently was not very flexible or easy to change.
I tried to educate them as we went along as to what was possible and what was not. They learned quite fast, especially considering they were very non-technical folks. So really it's up to us, the programmers and technical folks, to set the expectations of our users. All we have to do is bang the limits/possibilities into their heads and we will all be so much happier. Of course, that's the tricky part. ;-)