(yes it seems very much but don’t worry i like to help^^)
I dont know about the historic reasoning of throwStatus() but when you look at the implementation you see that it builds up the HTTP Response and then tells the Flow Dispatcher to send that via the StopActionException.
When you refer to rendering groups and exception handlers we intend to catch an Exception in the outmost layers. The exception must be of type \Neos\Flow\Exception (probably an inheritor), and here the property $statusCode must be set. That way the error handler registered by Flow catches that exception and does the handling.
Indeed its a bit weird how throwStatus() comes into play but it does not trigger the behaviour as we catch the exception earlier and trigger an immediate HTTP Response.
Maybe @kdambekalns or @christianm can shed light into why we have this kind-of two ways to do a similar thing.
In a very early version of my controller I’ve used simply $this->response->setStatusCode(422) but later there was an deprication notice - if I remember correctly.
Next days I will try to throw an \Neos\Flow\Exception and report the result here.