ООП очень тяжело заходит потому что совершенно непонятно для чего оно нужно.
Ровно для того же, для чего нужно программирования без ООП. ООП - просто достаточно простая и удобная абстракция для программирования.
Я так понял, что бы в этом всём разобраться нужно писать свою CMS на ООП.
Нет. Достаточно просто решить любую задачу с использованием ООП и без и сравнить для себя. Без ООП, т.е., функциональное программирование - у тебя куча файлов с кучей функций, каждый раз, когда нужно произвести какие-то вычисления над какими-то данными надо импортировать нужную функцию и использовать её для обработки данных. Когда у тебя десять строк кода и три функции - это достаточно просто. А если у тебя тысяча функций и несколько сотен видов данных для обработки, да еще и кучей разных форматов? А десять тысяч? Делать огромную документацию, в которой описывать какая функция с какими видами данных может работать и каждый раз её пересматривать в процессе написания или чтения кода? А вот ООП, говоря простым языком, позволяет группировать функции в отдельные группы, т.е. классы, которые могут работать с определенными типам данных и связывать сами эти группы функций с определенными типами данных, а так же связывать классы друг с другом (иерархия, наследование и прочее). Т.о., это упрощает работу с данными и их обработкой: просто создаем новый экземпляр класса и получаем удобный интерфейс для дальнейшей обработки каких-либо данных, путем использования методов этого класса для обработки данных, хранящихся в полях данного экземпляра или передаваемых в качестве параметров методов и сохраняемых в полях позднее.