Because the latter will give me a result that when i try to evaluate yields the General::ivar error saying that “A product cannot be used as a variable”
Why can’t it be so?
You specifically asked for this behavior! You used delayed evaluation (:=) meaning, first fill in the values of z then evaluate. In this case you want the regular evaluation (evaluate then fill in):
N0[z_] = z*D[-Log[1 - z], z]
Now N0[z_] is set to z/(1-z) as expected, and you can evaluate any z… You can ask for the definitions of N0 by typing ?N0