Без классов можно говорить только о некотором стиле программирования похожем на ООП. Это не будет полноценный ООП. В ООП компилятор многие вещи делает сам, в процедурном языке вам придется эти вещи реализовывать руками, например наследование. Так же хватает других ограничений накладываемых процедурными языками, например в Си нет перегрузки операций как С++, поэтому писать на Си в ООП стиле придется без них и т.д. и т.п.
В ранних версиях С++ был чем-то вроде препроцессора для Си компилятора. Так что ничего не возможного нет. Полноценная реализация на процедурном языке ООП слишком затратное занятие, имеет смысл только в каких-то экспериментальных целях или для изучения.