After several hours going through source code, I finally figured out how to do it. I had to create an ICustomModelLoader and register it using ModelLoaderRegistry#registerLoader. I then used ModelLoaderRegistry#getModel and cast that IModel to an OBJModel so I could use OBJModel#retexture and OBJModel#process to swap out the textures and add the custom data "flip-v" = "true". That would have been enough, but I also needed different transformations for different item perspectives (GUI, GROUND, FIRST_PERSON_RIGHT_HAND, etc). I had to create my own IModel and IPerspectiveAwareModel classes so I could override IModel#bake and IPerspectiveAwareModel#handlePerective. handlePerspective should always be
return MapWrapper.handlePerspective(this, [Your IModelState], cameraTransformType);
but you can pass in your own IModelState class to handle the different transform types.
Anyway, I wrote this hoping someone would find it helpful. Thanks to Matryoshika for pointing me in the right direction.