There are tons of problems where you don't need inheritance and can just use composition but let's just assume that was too impure as well. Then you can just use OOP ideas like encapsulation to map the data and the methods working on the data together. If I have a vector class, it makes sense that I overload the + operator to do things like v3 = v1 + v2.
That's orders of magnitude better than saying v3 = vector_add(v1, v2). Free functions instead of encapsulation are ridiculous. car_print(car) is a lot crapper than just saying car.print(). Hiding implementation details is how we get to build nice abstract things where we don't have to worry about implementation details. He is a low-level programmer through and through and can't even imagine why someone may prefer or enjoy a more abstract way of programming.
For more on this Ruby has excellent OOP support and it has permitted people to create insane amount of value. Rails for example is phenomenal. If you don't throw the baby with the bathwater OOP can be a phenomenal technique for organizing large codebases.