1. Creating a struct with desired state data 2. Creating functions that take a pointer to the struct as the first parameter 3. Declaring a variable with that struct type to create an instance of the object 4. Declaring another variable with that struct type for another object instance
... is not, in fact, OO at all, by any meaningful definition. 1..4 is just programming. People have done it since long before there was any "OO" buzzword. There are formal definitions of OO. The above satisfy exactly none of them.
This is in fact, by any meaningful definition of OOP, is a very reasonable pattern. With regards to formal definitions of OO, message passing aspect ought to be recognised rather than overemphasizing the object aspect.