I was thinking about this a little bit, you could always return values for distributed calls, but do a multiple return value approach like what you do in Go:
err := someStatefulCall(…)
result, err := someStatelessCall(…)
In Java/C++ you could do some sort of generic return value like ErrorOr<ReturnType>.
Of course you’d still need to worry about excessive network calls, so you’d be more permissive in breaking OO guidelines.