In CRM web client UI we use CL_BSP_WD_MESSAGE_SERVICE to raise message into UI.
The service class simply appends the message structure to its internal table.
During the final UI rendering phase, the message raised by application code is fetched from internal table of the message class.
Regarding CL_BSP_MESSAGES, as Thomas Jung has clearly explained here, it has similar usage as CL_BSP_WD_MESSAGE_SERVICE, that is to queue the message raised by application into its own internal table. However, neither of them are responsible for message display in UI, and the message stored by latter will not be handled by Web client UI component errorview2.htm, so if you have to use your own logic to display the messages.
Just a small example:
There is a public attribute message with type CL_BSP_MESSAGES and you can add message as below:
It looks not so good compared with the message displayed in the message area handled by CL_BSP_WD_MESSAGE_SERVICE.?