A parte i copia e incolla da mozilla, si tratta di variazioni sulle cosiddette enclosures. In realtà, non hai molti motivi per utilizzare questo tipo di espressioni, o perlomeno non sono pensate per evitare l' "inquinamento" degli spazi globali (anche se puoi utilizzarle a tale scopo, ma ha poco senso: uno sviluppatore conosce il suo ambiente di produzione e sa quali variabili o strutture dati vi operano).

Ad una variabile puoi assegnare come valore una funzione:
var foo=function(arg){alert(arg);}
ora, chiaramente:
foo('ciao'); chiama la funzione e lancia l'alert.

La sopravvivenza del valore passato all' argomento (nel nostro caso 'ciao') tuttavia non è sempre certa.
Se ad esempio l'argomento di foo fosse una risposta ajax (interroghi il server con ajax, e la tua funzione rimane in ascolto della risposta del server) un sintassi del tipo
var foo=function(risposta){alert(risposta);}
non funzionerebbe: siccome il server risponde dopo un certo tempo (magari mezzo secondo, ma comunque NON subito, non istantaneamente), ma la funzione è eseguita subito, si smarrisce la possibilità di assegnare il valore che a 'risposta' darà il server: la funzione si esegue SUBITO ma il server fornirà il valore di 'risposta' PIU' TARDI.

Una espressione invece del tipo:
var foo=function(risposta){function(){alert(risposta)} }
che incapsula una funzione dentro una funzione, consente la sopravvivenza del namespace (ed è questo il namespace che di solito si vuole preservare - quello asincrono non quello dell' oggetto window).

Siamo nell' ambito del

currying e del lambda: sono trucchetti usati o per garantire la sopravvivenza degli argomenti di una funzione in un ambiente dove tale sopravvivenza non è certa, o per passare funzioni come argomenti di altre funzioni.

Non ti preoccupare del gran mal di testa: è uno di quegli argomenti che devi sfruttare così: archivi la sua esistenza, poi quando un giorno ti troverai innanzi alla necessità in un tuo codice di fare sopravvivere un argomento di funzione o di passare una funzione come argomento ad una altra e troverai delle difficoltà, ti ricorderai di questo argomento e sarà allora, applicandolo ai tuoi codici, che lo capirai meglio.

Quanto a capirlo completamente, no non accadrà: per quale motivo questo incapsulamento esita in questo tipo di comportamento infatti deriva solo dalla maniera in cui è stato progettato l'interprete javascript e non da alcuna virtù misteriosofica delle espressioni lambda che si autoimporrebbe a javascript: javascript si comporta a questo modo perchè degli essere umani lo hanno istruito a comportarsi in questo modo - è una convenzione, non una forza della natura che si rivela.