Thanks! Another idea that I had was to add a custom loss that is 0 when the values are in [-1,1] and that grows very fast when the values are outside that range. This would still not guarantee that my model will predict correct values in every case, but it will make it less likely.
Then I could just add a postprocessing step like this: predicted_value = max(-1, min(1, predicted_value))
I will give it a try.