I always find the "algebraic closure" approach to be the best bet for explaining complex numbers. Much like how having negative numbers means that you can subtract any two numbers (closure under addition), having complex numbers means you can find the roots of any polynomial. If you don't have complex numbers, something like `x^2 + 1` has no real roots, and you have a problem.
The really nice part of this explanation is that it tells you why complex numbers show up everywhere. It turns out that it's rather straightforward to find physical real-world problems with input parameters that are coefficients to polynomials and behavior that depends on the roots of those polynomials. Take a slinky or another other harmonic oscillator - when you model it with a differential equation, the polynomial coefficients are how heavy the slinky is, how much speed-dependent resistance there is, and how springy it is. Factoring the polynomial gives you the behavior over time, and it pretty much always has some sort of behavior, so the roots should be some kind of number.
From the POV of this explanation, it's then quite fortuitous that the complexes are just two-dimensional over the reals, and can thus be easily visualized. That is, as soon as you adjoin the roots of x^2 + 1, and close under field operations, you actually get the roots of all polynomials.
There is a deep result stating that for a field F there are only three possibilities for what the dimension of its algebraic closure can be as an F-vector space: it can be 1, if F is algebraically closed, it can be 2, as happens for R and other real closed fields, or it can be infinite, as it happens for Q, but there is no other option!
The really nice part of this explanation is that it tells you why complex numbers show up everywhere. It turns out that it's rather straightforward to find physical real-world problems with input parameters that are coefficients to polynomials and behavior that depends on the roots of those polynomials. Take a slinky or another other harmonic oscillator - when you model it with a differential equation, the polynomial coefficients are how heavy the slinky is, how much speed-dependent resistance there is, and how springy it is. Factoring the polynomial gives you the behavior over time, and it pretty much always has some sort of behavior, so the roots should be some kind of number.