I mean, you can always just use an async crate and use async_std::task::block_on.
Mixing executors is approximately fatal, AFAICT.
You could have two executors with no problem.
What might cause issues is if code running on one executor needed close interaction with the other - such as running a task on the other executor.
Most of the time this is just avoided by using only one executor. But that's not the only way.