Нельзя "заменить" индексы. В массиве в Обероне индексы всегда идут от 0 до LEN(m) - 1 включительно, таким образом, в массиве из 5 элементов индексы всегда от 0 до 4.
Нельзя и добавить/удалить индексы, как это сказано в заголовке темы.
Но можно считать, что мы ограничиваем индексы справа не длиной массива, а какой-либо константой N, которая меньше длины массива.
Это и происходит в задачах, когда итоговая длина списка цифр (но не реального массива) после выполнения алгоритма становится больше или меньше.

А по поводу затирания значений - смотрите на условие цикла и его тело. В данном случае мы копируем значения из ячейки справа/слева в ячейку, значение которой не было определено в условии задачи. То есть мы имеем сначала массив 1 2 3 4 5, N = 5, L = 3.

i = 5, скопировали "5" из m[4] в m[5], массив 1 2 3 4 5 5. уменьшили i.
i = 4, "4" из m[3] в m[4], на этом шаге у нас массив выглядит как 1 2 3 4 4 5. уменьшили i
i = 3, "4" из m[2] в m[3], на этом шаге у нас массив выглядит как 1 2 3 3 4 5. уменьшили i
И в этом месте условие продолжения цикла становится ложным
i = 2, (2 >= L) = FALSE
цикл останавливается и мы просто вставляем "0" в позицию m[3]
Возможно даже последняя итерация лишняя. Так как я писал на скорую руку вышел такой косяк. Можно поправить условие на (i > L)

Аналогично для второй задачи сдвиг влево. Распишите руками последовательность значений. Пока не поймете как меняются данные в каждой итерации - не поймете и суть условий цикла.