OSCCAL only adjusts the oscillator slightly and it won't stop your code running even with silly values in it. If you are seeing a misbehaving program, other than something very critical of timing, OSCCAL probably isn't the problem.
Resetting the calibration used to be easy with the Pickit2 programmer but the facility was removed in later versions. I'm sure if you search there will be a program that does it for you but you would probably need a reference oscillator to compare its speed against. When programming devices with a calibration register in future, either read the old value before reprogramming and then put the value back again or try to avoid overwriting the OSCCAL value.
Note that you don't normally jump or call to the last byte in memory where the value is saved. The reset vector is normally set to that address and the instruction there loads W with the value so when the address advances it rolls over to 0x000 with the calibration value in W.
Brian.