The underlying hardware is mutable / imperative.
Load number into register A --
Load number into register B --
Add A B and store result --
Functional and data-driven / declarative interfaces are only made possible because of the imperative "ugliness" (reality) that supports it.
In order for students to understand computing e2e, they need to understand imperative programming.
In order for students to become capable of designing robust, powerful, and elegant systems, they will need to understand functional/declarative programming.