I am not talking about academic definitions; I’m talking about real-world language implementations, the vast majority of which do not make the distinction. And especially don’t implement lambdas one way and named functions another.
As for C, even vanilla C, as described in K&R or Harbison and Steele, functions close over their environment, but in a very restricted sense. In vanilla C, the "environment’ is the top level, the globals. And, in a way, Rust does the same thing with its top-level functions, from which you can reference “statics”, Rust’s global variables (though unsafe if mutable, as you discuss in the book).
I think part of the answer to my original question is rooted in the fact that Rust is a different class of language than Scheme or Python. I tend to think of Rust as being a modern-day replacement for C, solving a lot of the problems in C without sacrificing much, if any, of C’s performance. Neither Scheme nor Python aspire to that. It’s also statically typed, which is not true of Scheme or Python. So my comparison of what is done in Rust to Scheme was somewhat apples to oranges.