Maybe one advantage of having function/method be fundamentally different is, at the syntax level, making it easy to prove that your code doesn't perform method calls.
When reading C++ code, visually one can instantly tell if a call is going to be to a function or to a method:
This might be useful to C++ programmers, as they sometimes want to know when a call could go through a vtable, because of the potential cost of pointer indirection.
I imagine that the reason it's like this is, back when C++ was made, OOP was still controversial and not well understood, things like UCS or extension methods hadn't been invented, and people just didn't want to confuse this brand new "method" concept (and its weird virtual/override magic) with a regular function.
Today, it just seems like a good idea to have a way to abstract over whether something is a method call or a function call, because they are so similar.
Maybe I'm completely wrong though.