Good news! It took a whole lot of time staring at the disassembler in debugging mode, but I was able to identify and reverse engineer the decompression algorithm the game uses for its .OV_ files, where all the items, monster names, menu text, etc. is stored. I'm a little surprised I managed that, to be honest.
Anyway, I was able to reconstruct (correctly, so far as my tests have shown) the decompression algorithm in Python, and have been able to decompress all the .OV_ files.
Next, I need to figure out how to reverse the process and re-compress the files so they match the originals. EDIT: I think I have compression working (potentially barring at least one fringe case). I've tried decompressing and re-compressing one of the .OV_ files and replacing it in the ISO, and the game worked. The re-compressed file isn't identical to the original, because it's apparently impossible to exactly replicate how it orders byte pairs with equal frequencies in its dictionaries, but that shouldn't and doesn't seem to matter to the game. If I can manage that, I'll start seeing about extending my script editing tools to handle the new pointer type, and then see whether I can change the length of the text without breaking everything. EDIT: Already ran into some troubles with expanding the text that defines Addition text effects in the bottom right of the screen during battle. Have some ideas on how to expand the font table, at least.