If the main reason for creating the SPLIT_STRING macro was to help when you run out of registers, it might be a lot easier to use an INI file to store the extra data. When you run out of registers, you could save some of them in the INI file, use those registers for different data then save that data in the INI file and restore those registers to their previous values. This process can be repeated as often as is necessary.
An example might make this idea clearer.
Here are some macros to save and restore data from an INI file:
!macro SAVE_REGISTER REGISTER DATA_NAME
WriteINIStr "$PLUGINSDIR\ioA.ini" "Installer Variables" "${DATA_NAME}" "${REGISTER}"
!macroend
!macro LOAD_REGISTER DATA_NAME REGISTER
ReadINIStr ${REGISTER} "$PLUGINSDIR\ioA.ini" "Installer Variables" "${DATA_NAME}"
!macroend
There is no need to use a special INI file for this data; if you already have an INI file defining a custom page, you could use it instead of 'ioA.ini' in the above macros (InstallOptions will ignore the [Installer Variables] section in the INI file).
Here is how these macros could be used:
; Code using $0, $1 and $2 to handle passwords
; Now we need to do some map work but have no unused registers
; so we save some registers in the INI file
!insertmacro SAVE_REGISTER $0 "Email"
!insertmacro SAVE_REGISTER $1 "Password"
!insertmacro SAVE_REGISTER $2 "Result"
; Now we can use $0, $1 and $2 for something completely different
; When we are finished, we can save this new data in the INI file
!insertmacro SAVE_REGISTER $0 "Map folder"
!insertmacro SAVE_REGISTER $1 "Map name"
!insertmacro SAVE_REGISTER $2 "Texture ID"
; Now restore registers $0, $1 and $2 to their previous values
!insertmacro LOAD_REGISTER "Email" $0
!insertmacro LOAD_REGISTER "Password" $1
!insertmacro LOAD_REGISTER "Result" $2
Using an INI file to store variables can also help when you are testing/debugging as you can examine the INI file while the installer is running.
I hope this idea makes sense.
Brian