I think what you're saying is true in the case of someone just throwing up some code they wrote online without any plan of supporting or developing it further.
But once you call it an open-source project, and you have docs and a roadmap and an issues page and stuff, you're making an implicit contract with people who use it that it will do a reasonable job of solving the problem it claims to solve. The user is choosing to use it over other alternatives and investing time learning and integrating it, so it doesn't seem at all unreasonable to me for them to be frustrated when they realize that due to some bug or limitation it doesn't actually solve the problem for them that it claims to.
As an analogy, if you give someone free food and it makes them sick, are they justified in getting mad at you? I think most people would say yes. IANAL but I'd imagine that if you got food poisoning from Ben & Jerry's free cone day due to negligent sanitation practices or something, you could probably sue the company just like if you had paid for it.
Or, if a member of some sort of volunteer community board is doing a bad job, people will complain about it. An open source maintainer is basically in the same position.
Of course, that's no excuse for being rude to them, but you also shouldn't be rude if you paid for something and it doesn't work. I'm not saying we shouldn't do anything to reduce hostility towards maintainers when it happens. But it's not true, in open source software or anywhere else, that just because something is free there are automatically no expectations around it.