One of the biggest things that makes this so hard to do is that all the jumping around in the code--as the PIC carries out its instructions--is done by a goto command (no matter whether the original code was written in C, Basic, or Assembly). And the goto commands use absolute address referencing.
So let's say you have a goto that points to the beginning of mode 8. If you add any extra code into the middle of the hex, it is going to offset the location of any code that follows. So now that goto may really point to somewhere in the middle of mode 7.
Also, each line in the hex code refers to a point in memory on the PIC. So if you just copy and paste from a hex file then you are likely writing over a given spot twice (once with the 8 mode code and once with the 10 mode code.) ...ultimately losing code in the progress.
You can "disassemble" the hex code to get it back to "assembly", but it's very cryptic to read and without knowing the writer's original intent it is almost impossible to make the necessary changes.
Just my 2 cents.