I'm afraid I can't answer all of your questions. This is just a brain dump.
If you have any homomorphism f: H -> G, you get a restriction functor f
* on representations, but the existence of adjoints depends on the existence of certain limits, in particular, how large you allow representations to be. Formally, you get an induction f! that takes V to the tensor product over group algebras (or a fiber product with G if you're working with G-sets or G-spaces) which is infinite dimensional if G/f(H) is infinite. Similarly, the coinduction f
* takes V to H-module homomorphisms from the group algebra of G to V (or H-equivariant maps from G). This also works for Lie algebras and algebraic groups without significant alteration - when working with Lie algebras you use the universal enveloping algebras in place of group rings. If your groups, algebras, and representations come with smooth/algebraic/topological structure, then the definition gets more complicated due to completions, etc.
There is a fancy way to view representations as sheaves on a classifying stack BG, so the homomorphism f describes a pointed map BH -> BG, and the upper and lower stars and shrieks correspond to the usual sheaf operations. Sometimes people use derived versions of these functors, and apparently get useful results (although I don't recall any of them in particular). The induction operation can be thought of as a pushforward with proper (compact) supports while coinduction is a plain pushforward. A coinduced module tends to be "bigger", e.g., if you start with the trivial representation of the trivial group, the coinduced representation is the dual of the induced representation. Induction may use half-forms on fibers of a map, since the product of two half-forms is a volume and can be integrated along fibers to get functions on the target.