Running in to the same thing, it is because the systemd services such as waybar are bound to sway-session.target, meaning they start when it starts and stop when it stops. wayland.windowManager.sway.systemd = true; is what creates this target, which starts the sway-session.target when sway starts, so your waybar etc get started as expected.
The problem is that nixos/homemanager do not stop the sway-session.target when you exit sway, so many of those services will continue running thinking sway is still running, after you have quit sway. Some of them don’t care, others will crash due to the lack of a gui, and will crash repeatedly until systemd stops trying to restart them anymore. This is where you run into waybar not showing up again the second time you start sway.
I have tried all kinds of things to try and get that sway-session.target to stop when sway does and so far have found nothing that works. Seems to have very little interest from nixos/homemanager too. Every time I try to research this problem again I find new dead threads on the nixos forum asking about it with no reply.
some examples