Maybe it would be useful to mention that debugging can be more difficult when using tail calls as previous stack frames are not available.
With time travelling debuggers it might be possible to look at those, but that's a whole new topic.
Sure. But a recursive function can have errors happen in one call that are only detected a few levels down. Given a full call stack, you have a trace of the execution thus far that gives you information about where, exactly, things went wrong. With TCO, you're just left with the original call at the top, and the failed state at the bottom, and no snapshot of what happened in the meanwhile.
Of course this leads to its own problem if your now unoptimised recursive blows the stack...