You would either have to replace the bootloader on your chip (software) with one that knows about your GPRS shield (I don't know if there is one, so you would most likely have to write your own and that is not a trivial task), or use a second microcontroller to act as a programming interface between the GPRS shield and the main Arduino. That could be another Arduino.
The second option is probably the simplest to create:
- The GPRS is connected to Arduino A.
- Your main software runs on Ardiuno B.
- Both Arduinos are connected by serial
- Normal operation Arduino A passes all serial verbatim through to Arduno B
- Arduino A receives programming instructions and downloads the new code - maybe storing it on an SD card temporarily (not enough RAM in an Arduino) then resets Arduino B into the bootloader.
- Arduino A then sends the serial instructions in the same way that avrdude does to program the downloaded HEX file.
Arduino A is then a proxy between the GPRS and Arduino B. Arduino A does all the control of the GPRS and sends data between Arduino A and the internet and vice versa - it's up to you to decide how best to achieve that, depending on what information you have going backwards and forwards.
Both solutions require a certain level of programming knowledge and skill and aren't trivial, but are perfectly possible if you set your mind to it.