Generalization is different and occurs when you use inheritance. For example the base class "Animal" and the class that inherits from an animal: "Tiger". In this case, you can call it "is a" relationship. A "Tiger" is an "Animal". A "Tiger" is generalized by "Animal.
use a self message when you are calling functions in the class which either don't call other functions, don't send any messages (or they do but you don't want to show this in the sequence).
If you also want to model how the inner functions of the class interact with other lifelines, you have to use recursive calls to show this, otherwise the reader can't know that the messages are sent/received from the inner function.
A sequence diagram doesn't represent a process, but a sequence of interaction between objects, where an object is a specific instance of a class.
Therefore, the representation of the recursion would be similar to the way you represent it in code: in one diagram you would only show what happen at one level of your recursion