For sf::Vector2f, the reference doesn't really pay off. Imagine a double, it has the same size as 2 floats, yet you pass it by value. Also, the reference isn't free either; it also needs to be copied, but even more importantly, dereferenced. You will hardly notice any performance difference, especially considering that compilers are also allowed to optimize such code.
In my own code, I pass sf::Vector2f by value, since it's more readable.
For return types, there is even another argument in favor of copies: It leaves more freedom to the implementation, while const-references require a member variable or another object that is still valid.