The word message is for some application and/or OSAX a command, class or property. To make this work no matter in which context this is executed you should wrap pipes around the variable name. So to use your code inside an tell mail block the code should look like this:
tell application "Mail"
set |message| to "Hello world "
set |message| to |message| & |message|
end tell
I know it looks ugly but it's the only way that you can force AppleScript to interpret the word as a variable.
edit: FWIW, I'm using variable names camel case and single words always starts with 'the'. So I would use theMessage instead of just message which never conflicts with application key words. 'the' is like the dollar sign in PHP.
edit 2 : grammar