Positional parameters are fine when you only have a very few MANDITORY parameters. I would like other Shortcut properties such as TOOLTIP (description) supported.

What I would like to suggest is enhancing your command line handling in such a way that existing positional based code is supported as well as parameter based as well as mixed.

If you have a command which takes 3 parameters such as:

CreateShortCut "alink" "atarget" "afile"

Then I suggest that (to make it VERY SIMPLE for you, if a parameter starts with '#' (which it never needs to - as it can be quoted) then it is a parameter name and not a positional parameter, allowing a command such as the following to be valid (and much easier to read):

CreateShortCut "alink" "atarget" "afile" #TOOLTIP='a tooltip'

or for that matter:
CreateShortCut \
#LINK="alink" \
#Target="atarget" \
#FILE="afile" \
#TOOLTIP='a tooltip'

The above would also make it much simpler to document and much easier for a new user to get going with NSIS.

My other major suggestion might be to get rid of the many little config commands (like "InstallColors") and replacement them with a new config" command, so maybe use:

Config #ListBoxBg=000000 #ListBoxFg=FFFFFF #Other=x

This comamnd would not take positional parameter as it does not need to be backwards compatible (something in general NSIS does not try hard enough for) and only listed items are configured.

A minor suggestion is to do with quotes, my PPWIZARD program allows the user to use ANY (non alphanumeric) character as a quote, whatever it finds at the start is the quote, this would also make NSIS easier I feel.

Anyway my 3 cents worth! Hope you agree...