I think that most people that bash OO fail to understand how to use it properly.
From my experience many are also pretty bad at doing ADTs in module based languages.
OO has quite a few powerful concepts, and not all languages that are OO based explore the same set of concepts.
This is why the best languages to work with, are the ones which offer multi-paradigms, allowing the developers to pick the best abstractions for each scenario.