Hi @dougaitken,
The frontend should post the payment details to stripe to get the source id before submitting the form.
This is how the plugin works with credit cards, is it not? It creates a source via stripe API, adds it to the form as a hidden field, then submits the form: https://github.com/woocommerce/woocommerce-gateway-stripe/blob/master/assets/js/stripe.js#L485-L532
I can simulate the issue on the server by disabling JavaScript on the browser, but this is not what’s happening for users, since I can see from the logs they’re making an ajax call.
However, I’d think even in the case of JavaScript being disabled the plugin should not allow Woocommerce to create an order without having payment information.