Проблема не в типе возврата лямбда-выражения. Проблема заключается в типе самой лямбды.
Каждое лямбда-выражение является уникальным анонимным типом.
В вашем коде компилятор знает, что лямбда возвращает void, но пока нет знать тип лямбды, так как он еще не полностью ее проанализировал.
Чтобы дать контрпример для выделения проблемы.
#include <iostream>
int main()
{
int x;
auto func = [&](){
// func is going to become an int here, but the compiler does not know that yet
// it has to parse the whole expression first.
x = func;
return 5;
}(); // <-- calling the lambda and assigning the return value to func
}