Arc mutates inmutable pairs (cons), it worked initially because at the C level mutable and immutable pairs were the same struct. Now there is a primitive unsafe-set-immutable-car! [1] for cases like this. It's a weird primitive and should be used with a lot of care as explained in the docs.
[1] https://docs.racket-lang.org/reference/unsafe.html#%28def._%...