Когда использовать ООП?
ООП - это не только, когда вы берете какие-то сущности из предметной области и оборачиваете каждую в объект, который что-то умеет делать. Это больше подход к организации кода. Вы делите задачу на подзадачи, а данные на обособленные части, абстрагируете детали внутри объектов. Это позволяет снижать сложность архитектуры. Теоретически любую программу можно написать внутри одной огромной функции с кучей goto. Но так никто не делает, потому что это невозможно поддерживать и невероятно сложно написать. ООП - это логическое продолжение процедур. Теперь вы не только какие-то части программы абстрагируете в одном месте, но теперь еще и данные вмести с ними.

Мне нужен объект, который будет хранить состояние/данные, и есть общие операции над этим состоянием?


Вопрос: что значит нужен? Всегда можно взять глобальную переменную, написать функции, которые это состояние принимают и что-то с ним делают. Но довольно часто организация в виде объекта просто удобнее.
У каждого подхода/парадигмы есть какая-то цель. Если вы понимаете эту цель и действительно хотите использовать её преимущества и недостатки, тогда используйте. Если не понимаете - используйте другой подход, чью цель понимаете. Если нет таких подходов, используйте общепринятые.

p.s.
Любой код можно переписать для любого подхода.