After digging into to issue, I have to say I am a little confused. The spec issue #314 says to automatically add a h:messages as the last child of every UIForm if there is no UIMessages in the view.
However there are some problems with this approach. At first the presence of an UIMessages does not mean that every FacesMessage is really displayed (e.g. if the attribute for is set). Furthermore we would have to traverse the whole tree to find out if there really are UIMessages or not, because we can't rely on our facelet handlers or JSP tag handlers to find out if there is an h:messages component, because the user might use a custom messages component (like e.g. the one from tomahawk).
The easiest way to determine if every FacesMessage really has been rendered is to check FacesMessage.isRendered() on every FacesMessage, but we can only check this after the rendering has happened and thus we won't be able to add the h:messages component any more.
Using <ui:debug /> on Mojarra to see how it deals with this scenario I found out that it does not add an UIMessages component at all. It seems to hook into the rendering phase before the body tag is closed (and not at the end of every form like the spec issue says) and to just add the HTML from the h:messages renderer to the output without adding the component itself to the tree. Thus, Mojarra does not change the component tree at all, which is kinda nice!
I will try some things out to find the best fitting solution to this problem. Suggestions are always welcome!!