It’s not a recursive function, but yes - the transition will be re-fired after the first one completes. You might find that the parameter iterations=0 might cause infinite looping, if that’s what you want (but I haven’t checked.)
Gotcha: I think the function ‘foo’ needs to be declared as a variable before the function is created because within the function the function name has not yet been constructed, which means the onComplete=foo will evaluate to onComplete=nil, and so the re-fire will not happen. You would want something like:
local foo foo = function() -- something happens here transition.to (someObj, {time=1000, x=100, onComplete=foo }) end