Why does the regular assignment statement (say, x = 5) return the value assigned (5 in this case), while the assignment combined with a variable d
That's the way the language was designed. It is consistent with most languages.
Having a variable declaration return anything other than undefined is meaningless, because you can't ever use the var keyword in an expression context.
Having assignment be an expression not a statement is useful when you want to set many variable to the same value at once:
x = y = z = 2;
It can also be used like this:
x = 2*(y = z); // Set y = z, and x = 2*z
However that is not the most readable code and it would probably be better written as:
y = z;
x = 2*z;