I suppose my allergy is to the verbosity and code vomit that comes out in most production java/C++ and even OO Python code I've seen.
In C I would use structs and pass around pointers, then have functions that take those as arguments. This obviously sucks in the asynchronous case, but that paradigm has always felt more natural to me.
Put it another way: two examples. A) class Point with locals x,y,z and method 'distance' which takes a parameter that is another point. B) struct Point with components x,y,z. Then we have a function 'distance' which takes pointers to two Points.
Case B's - int d = distance(p1,p2); feels way more natural to me than Case A's - int d = p1.distance(p2);
Totally agree with the toolbox mentality, I've just rarely felt like the object hammer has felt like the right tool.