Os fechamentos são apenas algo para resolver uma variedade de problemas de maneira elegante. Na verdade, nas linguagens de programação onde não existem fechamentos, são criadas técnicas para implementar funções semelhantes.
Basta pensar em functores em C ++ ou Runnables em Java. São apenas técnicas que permitem funcionalidades semelhantes aos fechamentos. Algum tipo de "fechamento manual".
Os fechamentos estão ficando mais populares porque são integrados a idiomas populares: o Javascript está crescendo devido a aplicativos online (como o google doc, por exemplo), o C # o implementou, o PHP o implementou desde 5.3 e assim por diante.
Agora que os fechamentos estão disponíveis em mais e mais tecnologias, torna-se bastante claro que mais e mais pessoas estão interessadas neles.
Então agora, o que são fechamentos? Isto é bem simples. Um fechamento é uma função e um contexto para executá-lo. Isso é manipulado como um objeto. Por que isso é útil? Isso é útil para conectar seu próprio código ao código existente.
Aqui estão duas situações comuns que exigem isso: quando as ações são gerenciadas por outro trecho de código, como em multithreading com um pool de encadeamentos, ou quando uma ação deve ser executada em um evento escolhido (geralmente usado em javascript para a interface do usuário).