At the time a passage is shown to the Reader all it's contents/code is processed to generate the HTML to show to the Reader, the only code that is not processed at that time is code that is within the associated hooks of macros that either required user interaction (like (link:) and (click:) macros) or timer based macros like (live:).
This is why your (if: $tme is >= 3) related code is not working like you expected it to because at the time it was processed $tme equalled zero.
Try something like the following:
<!-- You should initialise a variable before you manipulate it. -->
(set: $var1 to 0)
(set: $var2 to 0)
(set: $var3 to 0)
(set: $var4 to 0)
(set: $var1 to it + 5)\
(set: $tme to 0)\
blah blah blah
(link-reveal: "One.")[{
(set: $tme to it + 1)
(set: $var2 to it - 5)
(print: " blah blah")
(if: $tme >= 3)[(replace: ?output)[blah blah]]
}]
(link-reveal: "Two.")[{
(set: $tme to it + 1)
(set: $var3 to it - 5)
(print: " blah blah")
(if: $tme >= 3)[(replace: ?output)[blah blah]]
}]
(link-reveal: "Three.")[{
(set: $tme to it + 1)
(set: $var4 to it - 5)
(print: " blah blah")
(if: $tme >= 3)[(replace: ?output)[blah blah]]\
}]
[]<output|
notes:
a. You should initialise variables (like the $varX ones) before you manipulate them, ideally this should be done in your story's startup tagged special passage.
b. Don't use the is operator with the mathematical operators when testing for things like greater-than or equal to. Although Harlowe 2 allows this it is like say $tme must be exactly 3 and that $tme can be greater-than or equal to 3 at the same time, and that doesn't make logical sense.
c. I generally suggest using the (link:) related macros instead of (click:) because (click:) needs to search the whole content to find the relevant text/hook, and it keeps doing that anytime the page structure is changed.
eg. whenever the text on the page changes.
d. Try to format your code, it makes it easier to read and understand, both for you and for others.