1. User1 joins
2. User1 is set +ov
3. User2 joins, sees @User1 in nick list
4. User1 sets -o
From User1's perspective, it is +User1. However, User2 is unaware that User1 is voiced (the NAMES only showed @User1), so his nicklist just says User1.
The solution is to send all prefixes in NAMES, so it would show @+User1. Naturally, that would break clients that don't support it. To deal with this, there is a 005 token called NAMESX. This indicates that the server is capable of sending multiple prefixes. But we also need to know the client understands this. So to do this, upon receiving a 005 token of NAMESX the client sends back:
PROTOCTL NAMESX
This tells the server that the client supports this feature and hence the extended NAMES reply will be used. If PROTOCTL NAMESX is not received, the server will just use the normal system. [...]
mIRC also does the same thing for 005 UHNAMES (and PROTOCTL UHNAMES) to indicate that it supports n!u@h in a NAMES reply. The idea is to eliminate the WHO request that client's send when first joining channels. As of yet, I know of no servers implementing this feature. "