Let us view the programming language abstractly as the (finite) description of a Turing machine's operation, which I assume is what you are aiming at by saying the language is RE or context-sensitive. The setting here is us having a single machine (a "universal" interpreter) to which we feed inputs of the form $(P, x)$ where $P$ is a program, $x$ is an input for $P$, and, considering $P$ as a function operating on $x$, we wish to compute $P(x)$. Note this is quite a different setting than when recognizing the language of valid programs (see @rici's answer).
We know the context-sensitive languages are those recognizable with a linear space bound. This means a machine for this kind of language only uses as much memory as its input is long. In "programming language terms", this roughly corresponds to the input being processed in place (e.g., sorting an array in place). In contrast, a recursively enumerable language (in general) requires an arbitrary amount of space.
It seems to me this is as far as the abstraction takes us. Pinpointing a particular programming language construct is infeasible unless we also make explicit assumptions on said language (e.g., what paradigms it uses).