I have written lots of C code (and asm code) that was all event driven.
Typically from timer, watchdog, and I/O interrupts. With lots of schedulers to initiate periodic software functions.
In my experience, most schools do not teach the kind of thinking needed to handle event driven programming.
There are concurrent languages, often running on PLCs, ASICs, etc that are continuous, concurrent, etc. Mostly, after learning those languages, a programmer must be thinking in those languages to obtain the most out of them.
Then there are the I.A. languages like Lisp and Prolog that are completely different from either the sequential or event driven languages.
I.E. each language has its' strong and weak points. If a programmer wants (or needs) to use a specific language, then they need to learn that language, so they think of programming problems in the terms of that language.
SO, IMO: the 'sequential' languages are best to learn first as they are the easiest to understand, so the basic concepts are known before learning the more esoteric languages.
And then there are the languages like C++ and C# and J# and many more that can be coded for either environment.
But first, the underlying concepts need to be understood.
Concepts Ranging from memory and register concepts, to the history of programming, to the Turing machine, to 'ancient' things that were the forerunners of today, such as ASCII, and 80/96 column punched cards and card readers and paper tape and magnetic tape with level shifting and low level programming of I/O devices, etc etc etc.