Во-вторых, оператор Delete не изменяет строку в том контексте, который тут обсуждается, иначе бы этот код не работал:
#pas
var
S: string;
begin
S := '123456789';
Delete(S, 1, 1);
_debug(S);
end;
#pas
var
S1, S2: string;
begin
S1 := '123456789';
S2 := S1;
// Здесь S2 = S1, точнее, строки не только равны побуквенно, а это одна и та же строка
Delete(S2, 1, 1);
// Здесь S2 <> S1, что значит, что в S2 произошло копирование строки S1 и затем в S2 была присвоена обработанная строка
end;