Просто если есть ветвление состояние и исходный объект надо где-то продолжать использовать - все ваши соображения валидны и я с ними соглашусь. Если используется только новое состояние - это костыль
да, исходный объект иногда нужно продолжать использовать. да и вообще, не хочу никому отдавать свой объект (в подфункцию, к примеру), чтобы мне чё-то там неожиданно поменяли. CQRS часто не соблюдают, потому проще запретить мутации чтобы об этом не думать каждый раз