Using a Timer node in code is fairly painless, you don't have to create it in the editor to use it.
var timer = Timer.new()
timer.connect("timeout", self, "some_func")
In terms of pure lines of code it's comparable to creating timer and time limit vars, incrementing in _process() and checking the value every time. The main point of preference for me is separating the timeout callback function from rest of the code, but there are times where having it inside process can be beneficial.