Internal command it is.
-------------------------------
Most of what we know, we learned ourselves. Only the most basic stuff lies in the documentation, and the few advanced functions explained in there are disregarded by newbies anyway.
Regarding the '@', think of square brackets as levels. Example: [level_1 [level_2 [level_3]]]
The '@' can be used to retrieve the value of a variable from a previous level. Most of the time it's not necessary to use it, since a variable's value remains consistent throughout, but for the few cases it doesn't, '@' is necessary.
Take for example a sleeping loop. [loop i 10 [sleep (* $i 200) [say @i]]]
The loop itself is the first level. The sleep is the second level and 'say' is the third level. Due to the sleep, the value of 'i' is inconsistent throughout the whole example. The value of 'i' in the first level is likely a stable integer. The loop changes that, so the value of 'i' on the second level is define by the loop itself. However, in the third level, 'i' is once more stable, and so using $i wouldn't reflect the value the loop is forcing 'i' to be, and that's where '@' comes to use.
However, '@' is a bit quirky and may cause problems in a script if used where it is not really needed. 'if' operators should for no reason require variables of subsequent levels to use '@' unless a loop or sleep, or any other command that may offset things takes place. I call value inconsistency "offset", just to be clear. :P
----------------
Square brackets are meant for executing commands, while round brackets practically process their content before the rest of the commands take place. Do not be mistaken however, square brackets are also containers, and may be used to act as a list, whether for an array of strings or a single value, it's all valid. A few examples:
clampval = [max $arg2 (min $arg3 $arg1)]
To use it, you'd have to do (clampval VARIABLE MIN MAX). if you did $clampval you'd just get a result of the contents, which isn't what you want.
----------------
Another sample function for the round brackets now:
client_auth = (? (= (&& (isconnected) (hasauthkey))) "^f4")
To use it, you'd simply do $client_auth, since it's MADE to process the given data before hand, so you just grab the value it "contains". This does not imply that the function aliases itself to a value. It merely acts as a "relay" to the code it is aliased to.