1) Not really, it's not part of core kivy (at least not right now) so although our backend supports it fine thre hasn't been a focus on documenting it. There have been a few different people making avenues with it recently, so maybe there will be more direct support soon.
You could check out kskrypnik's kivy3 projlect on github (+ his other examples) for the beginnings of a 3d framework with kivy.
2) I don't know, the nskrypnik stuff is probably a good start for proper support.
3) If you want to work with the kivy api, each wRenderContext (or Fbo) can have its own shaders, and the graphics tree may be made up of multiple nested fbos. If you're doing something like replacing a widget canvas with a Rendercontext as some of our examples do, the answer is to have nested widgets with one per shader.
4) I don't know - if there's a normal opengl way, you probably want to call that (you can find kivy's bindings in the kivy graphics code). You can set the variables by simply indexing the RenderContext, e.g. rendercontex['someuniform'] = something'.