is there a way to send this program to be uploaded onto my device through the GPRS connection?
Yes, there is a way although a rather complex one. You have to get all necessary code into your bootloader. The standard Arduino bootloader code is only able to get the new program using a serial protocol. There are bootloaders which get the updates by TFTP, other types are possible but probably increase the size of the bootloader, so the available storage size for your sketches decreases.
For example, is it possible to wright the whole program at the empty memory area and change the bootloader so that after the reset it will be loaded?
No, because usually you don't have enough memory. The only memory available from a sketch is RAM and EEPROM. An UNO has 2kB RAM and 1kB EEPROM, so the sketch size would be rather limited. A relativly simple solution is using an external EEPROM (by SPI or I2C), getting the update from the server, storing it in the external EEPROM and resetting the Arduino. Then the special bootloader can read the new sketch from the EEPROM and write it to the program memory (flash), deleting the EEPROM after that. But in any case you need to burn a new bootloader.