Using the message templates function allows you to use any "view" format (like erb or haml) to generate messages. If you were to store the "raw" format of that message you would need to differentiate between quite a few formats and it would be rather restrictive as well towards adding newer message formats.

Neither would I call this a "nasty" hack, or a hack even for that matter. This is purely sanitizing user input and restricting it to allowed tags. Don't forget that Markdown allows plain HTML in it as well. We are now filtering it one place before any mistakes can be made.