How to trigger error when not using wp_reset_postdata();? Why use it if the loop works without it?

You are missing the point of restoring the context to original state.

Yes, your loops do work without reset. But anything that tries to access queried post after them will hit leftovers of your custom queries in global variables, rather than post from main query.

In a literal sense the reset after your first query in this specific code is redundant, since there is nothing else done and you just proceed to do another query. However it is a good idea to keep it, because in case of future changes to the code the order of things might very well might change and this will suddenly cause an issue unnecessarily.