You can use the ISP sketch to program any chip externally (including setting the fuses).
(e.g. Arduino Playground - MegaISP )
You can change that code to program autonomously rather than waiting for STK500 commands (this needs some understanding of the code).
Then just make a copy of the upper part of its own FLASH, byte by byte.
Don't forget to also set the fuses!
Edit:
With the help of a PC it is just this: http://arduino.cc/en/Tutorial/ArduinoISP