If you want to allow multiple installs each install would have to use a unique uninstall key name:
...
Page Directory
Page InstFiles
!include LogicLib.nsh
Section
SetOutPath $InstDir
System::Call 'OLE32::CoCreateGuid(g.r1)' ; Generate a new GUID for this install
WriteUninstaller "$InstDir\Uninst.exe"
FileOpen $0 "$InstDir\Uninst.exe" a
${If} $0 <> 0
FileSeek $0 0 END
FileWrite $0 $1 ; Save the GUID in the uninstaller
FileClose $0
${EndIf}
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_$1" "DisplayName" "${APPNAME} (Remove only)"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_$1" "UninstallString" '"$InstDir\Uninst.exe"'
File "MyApp.exe"
SectionEnd
Section Uninstall
FileOpen $0 "$ExePath" r
${If} $0 <> 0
FileSeek $0 -38 END
FileRead $0 $1 38
FileClose $0
${If} $1 != ""
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_$1"
${EndIf}
${EndIf}
Delete "$InstDir\Uninst.exe"
Delete "$InstDir\MyApp.exe"
RMDir $InstDir
SectionEnd