Es para usar la memoria de manera optima.
Cuando se definen variables de tipo puntero, estas no ocupan espacio de memoria hasta que no se le diga explicitamente (NEW). Así mismo cuando ya no necesitamos la variable, la podemos liberar (Dispose).
Por otro lado cuando definimos una variable "normal", esta reserva su espacio de memoria durante todo el tiempo que el programa (o procedimiento) se esté ejecutando.
Código Delphi
[-]
var
p1,p2: ^Integer;
i,j: Integer;
begin
New(p1);
end;