The XNSpotLocation getting/setting wasn't allowed when preedit callbacks were used, the original motivation about this limitation was that xim servers weren't handling it position with preedit callbacks, however in the current state I'm not sure if there's a single xim server that could break from it, and it's more desired for the end user.
Moreover libxcb does allow doing so, so if the client is using libxcb the XNSpotLocation could be set, unlike with libX11. So for the end user it looks like libX11 clients are buggy compared to libxcb ones, since their IME popup window is being in the wrong location with the libX11.
The change was already brought in the past in , but it seems like it got lost.
 - https://bugs.freedesktop.org/show_bug.cgi?id=1580.
I've tested clients that use libX11 and servers like fcitx and ibus (whatever default gnome on X11 is using). The change seems to work and behavior is the same as with libxcb.