Si claro. Aca te dejo algo del codigo que tienes que utilizar.
Esto esta probado con Delphi 7 e Indy 10.
Código Delphi
[-]
var
vUpdatePacket: TMemoryStream;
begin
vUpdatePacket := TMemoryStream.Create;
try
IdHTTP1.Get('http://mydominio.com/updates/miApplication.exe', vUpdatePacket);
vUpdatePacket.Seek(0, soFromBeginning);
vUpdatePacket.SaveToFile('update_aplicacion.exe');
finally
vUpdatePacket.Free;
end;
Ahora una cosa. Generalmente cuando los programas actualizan ellos llaman a un programa actualizador que esta en la misma carpeta que es quien cierra al que esta habierto, baja la actualizacion y la reemplaza por el programa viejo y acto seguido ejecuta nuevamente el programa. Esta seria una buena opcion.