#6 #8 Indudablemente: pero no siempre necesitas meter punteros a funciones en una estructura para "simular" objetos, sólo si quieres hacer métodos virtuales. Para todo lo demás, no lo necesitas.
No niego que hay características avanzadas de la POO que son complejas de hacer "a pelo", pero si hablamos exculsivamente de las características básicas, comunes a todos los lenguajes orientados a objeto, sí se puede hacer perfectamente con estructuras; incluso la herencia, aunque obviamente si se dispone de estructuras anónimas es mucho más sencillo.
#6 +1
Si quieres usar programación orientada a objetos con las ventajas que te proporciona un lenguaje de bajo nivel como C, puedes usar C++. La pega que tiene es que añade algo de complejidad. Otra alternativa sería Objective-C, pero la sintaxis tiene la influencia de Smalltalk.
Desde luego un lenguaje como C que está orientado únicamente a la programación estructurada, no se puede utilizar para programar en objetos. Son mundos distintos, y al mezclar uno con otro, estás mezclando los inconvenientes de ambos. Es como intentar programar en Java mezclando ideas provenientes de la programación estructurada (lo que hace muchísima gente realmente)