Hi Clément,
There's no way to fix the problem now without breaking backward compatibility because by now B's use of your accessor has been compiled into something that probably looks like an aref into an array. So if you change your object layout in A, you break a compiled B.
The way to avoid this beforehand is not to expose the defstruct's accessors as a public interface. You can't think of them as functions, because they have compiler macros associated. The easiest "solution" now is to make proper functions for those accessors that are public, and then having B recompiled. Also consider if you really need defstructs for their speed, because they're usually an array in disguise. Perhaps a (slightly, in most cases) slower eieio class would do.
João