I need to do some research; there may be a better way to solve this problem.
Well, if it's purely about not resetting state, wined3d_device_reset() has a "reset_state" parameter that can be set to FALSE. The reason it's currently set to TRUE is mostly because the wined3d_device_reset() call was introduced before the "reset_state" parameter, and TRUE matches the previous behaviour.
That's what I was thinking, yes, but I wasn't sure if the init_3d was doing anything interesting here. However this reset is only to change the swapchain size and format, and if I understand correctly we don't need to recreate the GL context for that.