Por solicitação, aqui estão os comentários apresentados como resposta:
Não sei se você entendeu completamente o fato de que funções em JS são objetos de primeira classe e, portanto, podem ser armazenadas até serem necessárias, após o tempo em que são criadas.
Por exemplo, suponha que você queira gravar em um arquivo e imprima uma mensagem de log; então você chama a função "write ()" (ou o que for) e passa a ela uma função que gera a mensagem de log (essa é a função de retorno de chamada adiada). "write ()" armazena internamente uma referência à função especificada, começa a gravar no arquivo e configura seu próprio retorno de chamada para saber quando a gravação é concluída. Em seguida, ele retorna antes que a gravação seja concluída; quando é, o retorno de chamada interno é chamado de alguma forma (esse é o trabalho da estrutura subjacente - no caso do node.js, é feito com um loop de eventos), que chama o retorno de chamada que imprime a mensagem de log.
A parte "adiada" significa simplesmente que sua função de retorno de chamada não é chamada imediatamente; chamando isso é adiado até o momento apropriado. No caso de funções assíncronas como muitas no node.js, o retorno de chamada fornecido geralmente é chamado quando a operação é concluída (ou ocorre um erro).
A maioria das coisas é assíncrona no node.js, mas no navegador com, por exemplo, jQuery, a maioria das coisas é realmente síncrona (exceto, obviamente, para solicitações AJAX). Como as funções de primeira classe são muito úteis em JavaScript (especialmente por causa do excelente suporte de fechamento), os retornos de chamada também são usados em todos os lugares do navegador, mas não são "adiados" para operações síncronas (exceto na medida em que não são chamados imediatamente por você, mas mais tarde pela função que você chama).
O fato de o sistema subjacente ser orientado a eventos é ortogonal ao uso de retornos de chamada adiados; você pode imaginar uma versão (muito lenta) do node.js que iniciou um encadeamento para cada operação e, em seguida, chamou seu retorno de chamada quando o encadeamento terminou seu trabalho, sem usar eventos. Claro, este é um modelo horrível, mas ilustra meu ponto :-)
Deferred
objetos do jQuery ? Isso é algo específico do Node.js?