The core problem with a deferred expression is really about when to evaluate the expression.
In your implementation a deferred expression is evaluated upon the first usage, but that behavior would be undesirable if the deferred expression is to be passed through a decorator/wrapper function.
But if you try to solve that problem by coming up with a syntax that indicates when to preserve or to evaluate a deferred expression, you are basically requiring that all existing code to be rewritten with deferred expressions in mind, which isn’t going to happen.
This is the paradox that needs to be solved before deferred expressions can make any progress. Until then, a lambda function with an explicit call for evaluation is still the most viable solution.