The single-event-thread design is not without its own problem; programmers have difficulty in understanding and abiding to it too.
Here we have an inherently concurrent problem - user actions and some IO actions occur concurrently. That problem cannot be reduced by some API or language trick.