A reference works like a pointer. Inside Blueprint, there’s no difference between these two, imo.
So, when you bring a reference inside a function, you are basically bringing the original variable inside the function. That means you can change the value of this variable without explicitly calling it again inside the function.
Like the little example I’ve made below:
Pass-by-Reference
Pass-by-value
You can see a lot of difference between these two functions, the first can set ANY Mesh you pass by parameter to the desired Mesh (In my ex, null). The second, you only update the variable that is inside the function, so you couldn’t make it generic, it would be very specific for this case.