We did a similar thing when passing comparison function to qsort of C Standard library. We see function callbacks as quite useful. The problem arose when functions needed to preserve state between their calls. This was achieved by having static or global variables. Functors are actually objects that are used like functions.
Functions have no ability to store their state naturally.
So they have to depend on global variables or static variables declared within the function. But objects on the other hand have data members that help object maintain its state. Calling f with various signals change the state off, but state is maintained safely within ' f ' itself. To achieve the same in C, we would have to have a global variable. Moreover, it would have been very difficult to maintain different instances of the state-machine.