Moreover, the state table is currently used in all backends, but the use of extensions makes it tied to the GL backend.
That's not quite true. Vulkan has extensions too, and adapter_vk_create_device() will pass the supported Vulkan extensions to wined3d_device_init(), which in turn will pass them to compile_state_table().
Of course that's not to say the broader point is invalid; wined3d_context_vk_apply_draw_state() simply doesn't use the state_table[], and ultimately I think we'd like the equivalent GL function to use the same basic structure.