Don't get stuck with bad ideas.
Why not calling
bullet.queue_free() right after the
collision was detected? Use
call_deferred(string method_name) if it's still in collision or use a
Timer with a very small delay like 0.025 or something.
If you still want the delay units in frames, then count frames in
func _process(delta) with a variable and set a
true after some frames, which will trigger
hide(). I recommend avoiding this overcomplication.