В первом случае вносятся изменения в объект arr, соответсвенно, раз в newArr хранится ссылка на объект arr, то и newArr меняется. Во втором переменной arr просто присваивается новое значение.
В первом случае ты передаешь в newArr указатель на массив, потом изменяешь этот же массив через указатель arr.
Во втором случае ты снова передаешь указатель в переменную newArr, а потом просто присваиваешь переменной arr другое значение, то есть убираешь из нее указатель, но не затираешь само значение. Мало того - ты вручную вообще никак не затрешь значение любого объекта, ты можешь только "забыть" о нем, а уберет его за тебя уже либо сборщик мусора, либо просто вся выделенная память затрется при перезагрузке страницы.
Потому что в Javascript копирование и передача производится by sharing.
В переменной хранится значение (или копия) ссылки. Объект немутабельный, а свойства очень даже.
Дмитрий Сошников хорошо всё это описывает.
В вашем примере вы записали в переменную значение примитива, но в другой переменной значение осталось прежним.