If it's a local function inside a function, it wouldn't take too much intelligence from a compiler to see that it's used exactly once. Furthermore, I don't think this is more true about lambdas than ...
Mmm, not sure what you have in mind, but multi-line do blocks in lambdas are very common in Haskell, especially as the last argument to a function that returns IO a. E.g.