In many cases, due to Rust's move semantics, the previous value is consumed anyway. Imagine a function that takes and consumes a Point by value and returns a new, modified Point (assume we're talking about a struct without the Copy trait, as Point would likely have here). The original Point is no longer usable, and you may just want to replace it with the modified one. Yes, you could have the function (if it's yours) take a &mut Point but that precludes other references to it and using &mut unnecessarily isn't really considered good Rust AFAIK.
From personal experience, this also makes it easy to set up `let y = f(g(x))` as easily reorderable or printf-debuggable statements in the form of `let y = x; let y = g(y); let y = f(y);`