Объект характеризуется наличием *изменяемого состояния*, и абстрактным интерфейсом доступа, т.е. состояние "спрятано".
Казалось бы никто не мешает делать объекты иммутабельными, мутирующие функции просто будут возвращать новые объекты (как со строками в .NET/Java).
Но на деле это очень мешает. Скептики могут попробовать на таких объектах построить систему, увидят. На таких "объектах" вы не получите главного — не сможете сделать декомпозицию системы.
Просто попробуйте, это проще, чем объяснить. Сделайте систему с кольцевой ссылкой, и посмотрите.