From a purely technical background, that 'flash crashes' can happen makes sense. The trading engine has no concept of particular tokens, what their intrinsic value is, what their prices on other exchanges are or whatever, it can only look at the available orders in the orderbook and if there isn't enough liquidity then a flash crash may happen.
Sure we can argue there should be protections to stop liquidating people if the market drops by a certain percentage in a single second or whatever, but that's where we get to choose arbitrary numbers - always difficult. Adding delays could also be risky: let's imagine the market doesn't pick back up and drops even more, now margin traders can't pay back their loans anymore.
Something I've been wondering is, should the engine draw on liquidity from other base pairs? For example, if ETH/BTC is catastrophically crashing, should margin positions be liquidated by drawing from orders on ETH/USD pair then selling the USD for BTC? This has both an upside and downside - it might make crashes less frequent (more liquidity to draw from), but could also cause a 'cascade' of crashes across multiple currency pairs (ouch!).
Whole topic is difficult, every exchange will need to find their own answer. But as more liquidity enters the markets, flash crashes will become less frequent.
Sorry for the rant, I should probably have posted this as a new blog post haha.