I remember one of the PLT Scheme guys talking about how without TCO in OO languages you can't even express state machines without creating new state holder objects.
In a way, without TCO you must manually abstract each step and the next one and drive the stepping from outside. Not too unlike using an iterator instead of asking a collection to call f() for each entry.
Having read what he said I too feel that TCO is a very nice addition to other language features.