You can emulate OOP also in C code,..
You make a good point that OO can be (emulated), I say implemented (not only emulated), in C. C libraries (including one's own) can help with this. I have used assignment of C function pointers at runtime as "overrides", and it worked perfectly. C can also be used to implement actual (the real thing) runtime objects that Dr. Kay refers to. What does a .c file compile to? A .o file, i.e an "object" file.

...
...Not to say that it's a Dr. Kay object, but it reveals the thinking at the time that an object is a runtime unit of code and data. Dr. Kay envisioned objects as runtime-modifiable units/cells that respond to messages, e.g. nodes on a network, or processes in an OS. These "cells" would have their own code and data. C++ was inspired by Simula - emphasis on "simulation", as a simulation of the "cells".
A C hash table, for example, has it's own local data, and of course that data must be managed at runtime only by the hash table functions. But that's different from the C++ bundling of data with functions in a class. In C, the data is still standalone as data, and a C hash table could allow extension, not by inheritance, but by functions that accept higher-order functions (e.g. hash algorithms) or other external functions in C that leverage the hash table and provide other capabilities. A C hash table could be designed that even allows the table client to provide their own data storage. C++ is usable, certainly, but overall, one is probably better off using C as long as they know how to use it properly including by writing/using libraries that handle memory safety aspects.
The solution of problems using pure interfaces, including interfaces with higher-order functions as appropriate, provides the elegance of the OO concept, including inheritance/override (again as a
concept) , but without the restrictive syntax that bundles data with functions. Granted, C is not the best language for this either, but in many ways I find C to be actually better than C++ (and simpler/clearer). C isn't opinionated and doesn't claim to have the "OO solution", but it provides the power to implement whatever is needed to accommodate any design.
So, back to the OP, asking if OO really offers much. Yes, interfaces and ability to provide implementations of them is a key feature of OO that helps with modular, expandable, interoperable, and maintainable designs. They key is not to confuse syntax that claims to be "O"O, with OO itself as a concept. The messages of a runtime object (Dr. Kay) are a great illustration of the concept of OO. The set of messages that nodes accept is the "interface" just as in code, the set of functions is the interface. The data that an object makes available or hides, is a runtime concept, not a compile time concept. It became confused with a compile-time concept when C++ classes were a solution to misuse of global data. Certainly, data organization in coding is important, but syntax for "OO" from a coding perspective, mustn't be confused with OO design for runtime applications. I propose that an ideal OO syntax harmonizes OO design with good and safe coding practices, and as I say, C++ is usable (and impressive as a novelty), but misses the boat to some extent (e.g. syntax: inflexible bundling of data with functions, and inheritance).