ООП позволяет действительно управлять сложностью, как сказали выше, и повышает возможность повторного использования кода.
Но ООП языков много, и даже четкого определения, что такое ООП, и в каких ситуациях его использовать, не существует.
Например, когда я смотрю на код на Java, мне кажется, что в нем огромное количество бойлерплейта и переусложнений типа:
EnterpriseBusinessFactoryJavaBeanFactoryFacade
.factoryMethodCreateDependencyInjectionStrategyMethod()
Как и с любым другим инструментом: можно использовать ООП с умом и по назначению, а можно городить десятки паттернов, абстрактных классов, фабрик и т.п., чтобы напечатать "Hello, world". Явно определенного пути от второго к первому не существует. Врожденные способности, анализ, и много-много практики.
Но говорить, что это врожденный недостаток ООП — явный clickbait. Точно так же можно писать плохой код на любом языке программирования и в любой парадигме.