It would not make it incompatible with other mods. Just make sure to "save" GL state before you start rendering with shaders to restore it after.
First, create custom shader helper class, that sets all uniforms, uploads shader, binds, etc... Now, if you want your shader to be customizable with resource packs, implement and register IResourceManagerReloadListener, in which you load/reload shaders. Otherwise, just upload it in post init.
Now, when your TESR is called, bind your shader, render OBJ model and then unbind the shader.
Seems easy? It isn't.
For the rendering part, as i said previously, you can either change how you upload things to shader or how you shader reads things.
The first option is easier. Just create all necessary classes using modern GL functions - Mesh, Matrix Handler, etc... For the mesh, it is recommended to use VAO with indexed position VBO and non-indexed texture & normal VBOs, because that's how OBJ model is encoded. Now you just have to write your own OBJ reader and compiler (which compiles it into a mesh). There are plenty of tutorials online on how to do this.
Read, compile and upload your model into mesh either in resource reload listener or post init and render this mesh in TESR.
Now just make sure that you inform users of your mod that at least GL3 support is required (all modern graphics cards support it, so no much worries).
Note: Rendering performance can be improved very much, by binding shader once... But i'll let you think on how that can be done .