I am not sure I understand your scenerio exactly. Let me post what I think you are saying and correct me if I am mistaken.
1) You click the button which does a callback and retrieves a message
2) That message gets assigned to the label on the client. Something like dnn.dom.getById('Label1').innerHTML = sMessage;
3) Some other control on the page does a postback and you loose the message that was assigned.
Is this correct?
If it is, then the reason you are loosing the message is that no where is the information being persisted. If you had a control like a textbox that contained the message, then its contents would be posted to the server on a postback, and if it was a runat=server control the contents would automatically be placed back in the textbox when the page refreshed. However, if you did not have a runat server the contents of the textbox would be set to whatever value is defaulted in your HTML.
Since the contents of a label (SPAN) does not get posted back to the server there is no way for it to know the value, regardless of the runat attribute. It is up to you to persist this value between postbacks. This is what the setVar/getVar is all about. If you are unfamiliar with this functionality I suggest reading the DotNetNuke ClientAPI Guide document. Specifically the section titled Passing Data Between Server and Client.
Basically this would involve code that in addition to setting the innerHTML of the label, would also do a setvar on some unique ID. On the server side (probably Page_Load or PreRender) I would check to see if a value exists in this field. If one is found set the Label's Text property to it. This of course assumes that the label has a RunAt server set.
Hopefully, my understanding of your problem was accurate and this info is helpful. If not, please post more information so I can get a better understanding.