What's the difference between variable binding and assignment?

The other issue with rebinding is that the name var1 may not only be bound to a new value but that the value could be an entirely different type.

var1 = 123 # this is an integer
var1 = get_new_value(var1, :something) # this could be a tuple
var1 = get_new_value2(var1, :something2) # this could be a map

… which does not help code clarity.

Also another way of looking at the pipeline operator is that it “threads” the result of the previous function into the next function (which is why in Clojure it’s called the thread first macro). In a pipeline there is the expectation that the return type of the previous function is compatible the expected parameter type of the next function - there is no expectation of the values travelling through pipe being all of the same type.