No, they do not. What they are lacking isn't in what they can or cannot execute, it's what we can say about them. If your PL has eval, then you don't know if foo is ever called or not, for example.
I'm not interested in talking about the currently running instance of a program, but all possible running instances of it.
It's still the same issue; consider the halting problem. There are times when we can say a call does not return in a turing complete language (the bottom type, e.g. never in TS or ! in Rust), but the reverse is not true. We cannot be sure a given call will return in a turing complete language even without eval.
You could avoid this for a definition of dead that equates with non-turing complete i suppose but that's not particularly interesting since it's not a general programming language in that case.