Yes, you can define a programming language that is Turing-complete even though there is no way for any program to halt.
Consider a variant of a standard programming language, with the restriction that every valid program has to be wrapped in an outermost "while True {...}" loop. Assuming this language has the ability to produce output. Such a programming language is Turing complete. For instance, you can add a boolean variable (initially True) that records whether the program is "done", and write a program of the following form:
while True {
if !done {
...
}
}
where you fill in "..." with anything you want. Now any time you would ordinarily halt, instead just set "done" to False. For instance, you can simulate a Turing machine; when the Turing machine halts, you output whether it accepted or rejected, set "done" to False, and let the program continue running but doing nothing.
There might be a little confusion about terminology. A programming language can be Turing-complete (or not). A Turing machine can be universal (or not). But there is no meaning of "universal" for programming languages; it doesn't make sense to ask whether a programming language is universal.