Почему я могу изменять массив при использовании const?
const делает неизменяемой только ссылку хранящуюся в переменной, на сами объекты оно не влияет
Массив = объект. Подробно про объекты-константы и копирование по ссылке объясняют тут.

Свойства его не защищены от изменений. Но можно его заморозить:
const arr = [0, 0, 0];
Object.freeze(arr); // ма-агия!
arr.unshift(100);   // выбросит ошибку: нельзя менять свойство длины, оно non-writeable
arr[1] = 'z';       // ошибки не будет, но
console.log(arr)    // [0,0,0]