Q:

Зачем нужны immutable-объекты? 

Мне не очень понятно, как могут использоваться такие объекты.  В качестве "констант"?  Но когда нужен такой объект? 
Цитата из вики тоже не даёт ясности:

В программировании неизменяемым (англ.  immutable) называется объект, состояние которого не может быть изменено после создания. 

Хотелось бы увидеть пример реального применения. 
Важно - хотелось бы увидеть JS-пример. 

A:

Представьте что Вы делаете программу для рисования, которая имеет функционал "пошаговый возврат действий".  Но для того чтобы возвратится на шаг назад Вам нужно иметь слепок программы в тот самый момент.  Поэтому Вы создаете такие компоненты, которые хранят свое состояние в объектах называемые ValueObject.  После выполнения какго-то действия нужно пройтись по всей программе и собрать эти объекты, а после сохранить в каком-то хранилище, например массиве.  Но тут есть одна проблема - в javascript не примитивные типы передаются по ссылкам.  То есть Вы нарисовали первую фигуру и сохранили информационные модели в массив.  После нарисовали вторую фигуру и тем самым все информационные модели изменились.  Но изменились они не только в компонентах, а ещё и в тот самом массиве, в который мы сохранили данные после рисования первой фигуры.  Все, программа сломалась! 
Для решения этой проблемы и придумали подход в котором объекты каждый раз создаются новые и не изменяются по ходу изменения программы.   
Еще очень часто приводят в пример удобство при отладки, но на мой взгляд современные отладчики делают тоже самое, показывая изменение программы по слоям.  Удобство тестирования - это да, сильный аргумент, ведь можно воссоздать любой момент и быстрее разобраться в причинах бага.  Отсутствие побочных эффектов - когда функция начинает работать с неизменяемыми объектами, она перестает изменять внешний код.  Отсутствие утечек, на мой взгляд возможен только тогда, когда используется функциональный подход, в котором неизменяемость является фундаментальным принципом. 