The intention of concurrent-modifiction-violation is for user code or library code (as opposed to the primitives provided by the implementation) to tell the outside world that you see something that can only happen if another thread is mutating the data structure you're working on? In other words, it's informative?
I mean, it would be pretty costly if primitives are required to detect such a situation in all cases. The example given in the entry of concurrent-modification-violation seems to detect only when the input list is truncated, but not when it's extended or its car is altered, so it is not meant to cover all the cases, I assume.