How can I handle unwanted, non-erroneous situations better?
Is there a more terse way of returning an error message and returning
  control to the caller for unwanted situations that aren't strictly
  speaking errors?


You can use THROW


  Raises an exception and transfers execution to a CATCH block of a
  TRY…CATCH construct ... If a TRY…CATCH construct is not available, the
  session is ended.


IF @UserName = 'John'
    THROW 50000, 'John, get out', 1;  


The above is somewhat more terse as it is just a single statement and doesn't need the RETURN so you can also drop the BEGIN and END