The underscore comes from pattern matching.
The x_ matches anything and this anything is bound to the name x in the body of the function.
l[x_ * y_] := l[x] + l[y];
Then in l[2*z] first the expression 2*z is matched against the
pattern x_ * y_ . Then x is bound to 2 and y is bound to z.
Then the expression l[x] + l[y] is evaluated, and the result becomes
l[2]+l[z].
Now say we want to define the value of l on e to be 1.
Do we write l[e] := 1 or l[e_] := 1 ?
One says that l to (literally) the variable e must be 1.
The other says that l to something gives 1.
http://reference.wolfram.com/mathematica/tutorial/Introduction-Patterns.html