I'm not familiar with lazy evaluation (I've not used any language implementing it). But I was wondering...
Why not have a 'calculate_now' function to let the programmer choose when a result is guaranteed to be calculated? Otherwise, resort to lazy representations. There could be some heuristic also: if at least one of the original object is freed by the GC, perform all the calculations depending on it. That could also be simpler: defer actual calculations until the end of the current block.