The best you can come up with that is exactly what you ask for is "has an eval function" (as mentioned by Javier in his comment to your question).
Self-hosting is not necessary nor does it necessarily do what you want. Two examples are: C is a self hosted language that cannot execute its own code in a string but Tcl is not a self hosted language that can execute its own code given in a string.
As a side note, half the time C runs in environments where there is no API to execute external processes. So while in some environments you can configure your system to make C able to execute its own complier and then execute its own code in general it is not really what you are asking for.
Side-side note. If we can cheat and use the "execute external compiler" route to do this then a language does not need to be self hosting to do what you want. It just needs an exec function to call its own compiler (which is often written in C).
Same with Reflection/Introspection, having the ability to do introspect yourself does not mean you can execute code in a string. Two examples of languages that has Reflection but does not have a built-in eval are C# and Java.
- As a side note, once you have an eval function you can usually do Reflection/Introspection albeit in a clumsy way.
Self-interpretive has the same problem with its definition as self-hosting. Tcl is a language where its eval function is not written in itself - it merely exposes the Tcl code evaluator implemented in C.
At first glance, Meta-circular evaluators looks like what you want. It is defined as self-interpretive where the eval function is built in rather than implemented in the language itself. But looking further you will notice that it is defined by the mechanism used to achieve the feature rather that the feature itself. Tcl is again an exception where it does not meet all the definitions of what meta-circular evaluators are but has an eval function nonetheless (no apply, not necessary). So it looks to me like a meta-circular evaluator is a specific implementation of the "has an eval function" feature.
So, I would simply say that any language that "has an eval function" can do what you are asking for.