Вообще в js нет настоящих массивов, это просто объекты, дополненные характерными для массивов свойствами.
В строготипизированных языках программирования, таких как Си, массивы это непрерывный кусок памяти, состоящий из элементов одного типа. В Си переменная, определяющаяся как массив, представляет собой комбинацию из указателя на первый элемент массива и величины сдвига относительно начала массива. Соответственно, операция обращения к элементу по индексу представляет собой не что иное как сдвиг относительно начала массива на количество байт, вычисляющихся как индекс * количество байт, занимаемых одним элементом этого массива (например, индекс 2, тип - массив байтов, то есть сдвиг будет равен 2 * 1 = 2 байта от начала). По аналогии, для того чтобы обратиться к первому элементу массива, нам нужно сдвинуться на 0, так как указатель уже ссылается на первый элемент массива.
Вот поэтому и с нуля принят отсчёт.
и непрерывный кусок памяти тоже доступен, типизированный массив называется