This means that no developer can depend on the written documentation as a definitive description of intended (or actual) behavior. As such, while the written documentation can be useful as a reference and as educational material for getting started, it is useless as a specification for exact behavior.
That is a statement of the principle that "the reference client is the spec". It doesn't necessarily justify it.
No it doesn't justify it, it simply explains the reality of the situation.
Is the long term plan that there will be one reference client forever?
I have no idea, but I suspect so. That's sort of the definition of a "reference client", isn't it? The "reference client" is the one client that is used to specify the details of exactly how the protocol works. Perhaps instead of thinking of "the reference client
software is the spec", it would be more acceptable to you to think of "the spec" as being a document that has been carefully and exactly written in a language other than English. "the spec" is a document that just happens to have been written in a computer programming language instead of an specific country's "official language". Since bitcoin doesn't belong to any particular country, it seems fitting that it's spec isn't written in English, or Spanish, or French, etc.
Ideally, the protocol should include some kind of system for handling a situation where some of the miners are using a client that has forked.
It does. Doesn't it? That's why it's called "forked". The protocol states that if a miner is using a client that doesn't exactly implement the necessary protocol rules, then the output of that miner is ignored and not accepted as "bitcoin" communication.
For example, if there was customer and miner clients, then customer clients would accept a super-set of blocks relative to miners.
And how would the "chain" be maintained then? The idea of the blockchain is to force a consensus. If a "customer client" is willing to hold multiple competing blocks as equally valid, then the concept of a consensus is lost.
There could be a system where miners pass blocks and transactions through multiple clients and only accept blocks that are accepted by all.
How would you know when "all" clients had accepted the blocks/transactions? How would you handle a situation where an adversary creates a client that specifically rejects the very transactions or blocks that you believe should be included?
The offending block would be logged for analysis and client authors would be expected to bring their software into compliance.
If two clients disagree about a two different blocks, which block is the "offending" one, and which is the "acceptable" one.