The difference is that the argument to noisy is meant to be another function, rather than a "plain" value like a number.  So, yes, it creates a new anonymous function just like greaterThan does, but it's a wrapper around an existing function that modifies its behavior.

In this case, the wrapper just logs some messages before and after calling the original function f.  But you could do other things, like modifying its arguments or its return value.  For example, you can implement partial function application, which lets you provide some of the arguments for a function call at one point in the program, and "remember" those arguments in a new function that takes just the remaining arguments later.

Explain "you can have functions that change other functions"
Could a Barbarian with Totemic Attunement (eagle) use grapple to perform the iconic move by dragging the enemy straight up as far as the fly speed allows and ending the turn in the air? If so, who would take fall damage?
