tl; dr: enquanto é principalmente açúcar sintático, a sintaxe mais agradável torna muitas coisas práticas que costumavam terminar em linhas infinitas e ilegíveis de chaves e parênteses.
Bem, na verdade é o contrário, pois os lambdas são muito mais antigos que o Java. Classes internas anônimas com um único método são (eram) as mais próximas que Java veio para lambdas. É uma aproximação que foi "boa o suficiente" por algum tempo, mas tem uma sintaxe muito desagradável.
Na superfície, os lambdas do Java 8 parecem não ser muito mais que açúcar sintático, mas quando você olha abaixo da superfície, você vê toneladas de abstrações interessantes. Por exemplo, a especificação da JVM trata um lambda de maneira bem diferente de um objeto "true" e, embora você possa manipulá-los como se fossem objetos, a JVM não precisa implementá-los dessa forma.
Mas apesar de todo esse truque técnico ser interessante e relevante (já que permite futuras otimizações na JVM!), o benefício real é "apenas" a parte sintática do açúcar.
O que é mais fácil de ler:
myCollection.map(new Mapper<String,String>() {
public String map(String input) {
return new StringBuilder(input).reverse().toString();
}
});
ou:
myCollection.map(element -> new StringBuilder(element).reverse().toString());
ou (usando um identificador de método em vez de um lambda):
myCollection.map(String::toUpperCase);
O fato de que você pode finalmente expressar de uma maneira concisa que anteriormente seriam 5 linhas de código (das quais 3 são totalmente chatas) traz uma mudança real do que é prático (mas não do que é possível, concedido).