This restriction isn't strictly necessary on all platforms, but is imposed to eliminate any nasty surprises when porting to platforms that require it.
Porting isn't always necessary, and restarting the event loop allows developers to avoid having to serialize and deserialize state and manage subprocesses and binary paths.
Using a platform-specific library other than winit isn't a great option either, even if there is one using it would mean throwing away the entire ecosystem built on winit.