Well, it shouldn't really work at all! Foo() is the return value of the function, in this case nothing. What you actually want is the function, so you just use Foo without the brackets (like #'Foo if you've ever studied Lisp).
var body = document.body;
body.addEventListener("load", Foo, false);
function Foo(){
addEventListener(document.getElementsByName("start"),"click", [COLOR="Red"][B]function() {[/B][/COLOR]alert("hello")[COLOR="Red"][B];}[/B][/COLOR], false);
}
The anonymous function is for the same reason, equivalent to lambda in Lisp.
As a matter of interest, John McCarthy who created Lisp died recently, and Lisp and JavaScript share many similarities.