[1] Even C has this with Apple's Blocks extension (http://clang.llvm.org/docs/Block-ABI-Apple.html).
As for closures, well, closures are an implementation technique. Not distinguishing between language features and implementation techniques is a part of an established tradition that comes from Lisp, but that doesn't make it any less wrong.
What do you mean by that?
(0) A function maps every element of its domain to a unique element of its codomain.
(1) Functions don't exist in time, let alone change over time.
(2) Two functions with the same domain and codomain are equal if they map the same domain elements to the same codomain elements.
Since when do so-called “first-class functions” in most programming languages behave like this?
More importantly, you cannot make functions in C. For example, one cannot write a function that, given pointers to functions that compute 1/x and sin(x), returns a pointer to a function that returns 1/sin(x)