The great thing about well-behaved total languages is they have the Church Rosser property. You can reduce the expression however you want, lazily or strictly, but all evaluation strategies converge on the same value.
In other words, as far as the theory goes, there is no need to choose lazy or strict. For all the theory is concerned with, "evaluation by random beta reduction" (full beta reduction) is a viable strategy.
What matters is deciding at what level do we decide evaluation strategy? If we bake it into our code with strictness or laziness annotations, our code becomes rigid and unadaptable. If it is left entirely up to the compiler, we had better have great faith in our compiler.
One possibility I'm personally interested in is evaluation strategy as a JIT optimization. I have dreams of my own language that is based on this principle. The idea is that you can run your code with the evaluation strategy completely unspecified on a special virtual machine. That virtual machine uses a training algorithm to heuristically assign a "pretty optimal" annotation (lazy or strict) to each function in your program.
Laziness is useful. But laziness as the default..... I'd rather save that for Haskell :)