There is one sole reason -- hat drops are very rare. The exact probability is unknown, but it is very small. It is hard to find it out, because you would need to log your hours of playing over a very long period of time, and not log the time over 10 hours per week (as it is not counted for the drop system). There is some data, but I don't know if you can actually trust it:
Robot Unicorn says here:
I have 13 idling accounts, and ill talk about what I get in one week counting all of them.
I always find something special like objector or name tag.
More likely I find 1 or 2 hats per week, some of my last drops were Fast learner and Bootie time.
My most lucky week was 4 hats + mann co. orange. Sometimes I find 2 hats in same week same account
Another guy says:
I've got 2 in an old account it had nearly 1000 hrs
All about luck bbg
And one more guy:
2780 hours and I have had many. Around 7
So, again, just don't bother and play. Most hats are not worth much anyway.