There may be another way, but if it where me, I might consider something like this:
Make your calling methods into a macro and place it in it's own header file (*.NSH).
Then, when you want to switch, you only need to rewrite your macro. (Your main script code could remain the same; you'd just switch header files.)
Examples of a macro:
; Dos window
!macro ExecMyCommand CustomExec command param
Exec 'cmd.exe /c "${command}" ${param}'
!macroend
; no window
!macro ExecMyCommand CustomExec command param
nsExec::ExectoLog 'cmd.exe /c "${command}" ${param}'
!macroend
Then in your main script:
!include myheader.nsh
...
!insertmacro ExecMyCommand "myfile.bat" "/d /a=p"
You could also tweak your macro to have both methods and insert the proper one based on another define. like:
!ifdef debug
; define old macro
!else
; define new macro
!endif