Just like many languages have annotations for inlining functions they could have annotations for tco. From an usability pov i would like annotations for must, must not, should, and should not. Where the "must" versions error if the compiler can't do the optimization
Scala and Kotlin have 'tailrec' annotation/modifier, though not as sophisticated as you describe.