Объекты в JS копируются по ссылке. Таким образом, при декомпозиции массива c в d вы копируете ссылку на объект. В результате c[0] и d[0] содержат ссылку на один и тот же объект { x: 1 }.
Когда вы меняете свойство x, то изменения проводятся в экземпляре объекта по ссылке. При этом в массивах по прежнему находится одна и та же ссылка.
Когда вы меняете значение элемента массива c[0], то в массиве c находится новое значение, а в массиве d по прежнему хранится ссылка на объект.
Да, и массивы здесь не при чём. То же самое можно продемонстрировать и с обычными переменными:
a = { x: 1 };
b = a;
b.x = 100;
a; \\ { x: 100 }
b; \\ { x: 100 }
b = 100;
a; \\ { x: 100 }
b; \\ 100
Вот вам ещё пример ссылок:
a = { x: 1 };
b = a;
c = { x: 1 };
a === b; // true
a === c; // false