Clojure does exactly that:
(defn gcd [x y]
(if (zero? y)
x
(recur y (quot x y)))
You can also recur with TCO to an explicitly labelled point within the function (effectively creating an inner, anonymous function): (defn factorial [n]
(loop [n n, fac 1]
(if (zero? n)
fac
(recur (dec n) (* fac n)))))
As I understand it, this syntax was developed because of limitations of the JVM w/r/t TCO.