There are a number of reasons for this. (1) JSDOMWindow claims HasImpureGetOwnPropertySlot (2) JSDOMWindow uses setCustom for many of its properties instead of setCacheableCustom. (3) JSDOMWindow needs to not cache in some cases, even where it says it might be able to. This is dependent on getting rid of HasImpureGetOwnPropertySlot.
There are a number of other properties on JSDOMWindow that can't be cached, but I picked screenX as the "canonical example".
This is done.