Sadly, that is not how it works in C++.
If you use any library as part of your ABI (eg in your headers) then everyone that deals with that ABI has to agree on it and should use ABI compatible versions of the library.
This is unrelated to protobuf and could happen with any other library you use.
Standard library vendors tend to maintain ABI compatibility within their own libraries even between versions for this kind of thing, but there's no such compatibility between separate implementations of the standard library.
Imagine the simplest API that does something like:
void Foo(std::string_view bar);
If standard library A implements string_view as `ptr,size` and standard library B implements it as `size,ptr` (or `begin,end`, etc) then mixing them up will make the caller and the callee disagree on where the data is in the string_view parameter and what it represents.
To avoid this kind of undefined behavior at runtime they push the ABI into the name of the type (ie the inline namespace). That way if the caller/callee disagree on the ABI you get a link time failure instead of runtime brokenness.