"You could probably create a user-space solution that monitored swap usage and created new swap files on demand."
It exists, or existed; search for "swapd". I remember it because it was in that context I submitted my one and only kernel patch (which was rightfully ignored).
swapd was essentially useless, because there was just no way for userspace to notice out of swap condition soon enough with polling. Maybe with a bit of kernel help like a netlink socket it would have been possible.