Did you try HKLM with ADMIN rights? i.e. Launch your installer with administrative privileges.
Code snipped should look like this
!include "MUI2.nsh"
!define PRODUCT_NAME "MyProduct"
!define PRODUCT_UNINST_REGKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_DEF_LOC "$PROGRAMFILES\${PRODUCT_NAME}"
!define PRODUCT_UNINSTALLER "MyUninstaller.exe"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Name "${PRODUCT_NAME} Test"
OutFile "${PRODUCT_NAME}_Setup.exe"
InstallDir "${PRODUCT_DEF_LOC}"
Section "Core section" SecCore
SetOutPath $INSTDIR
WriteRegExpandStr HKLM "${PRODUCT_UNINST_REGKEY}" "UninstallString" "$INSTDIR\${PRODUCT_UNINSTALLER}"
WriteRegStr HKLM "${PRODUCT_UNINST_REGKEY}" "DisplayName" "Name"
WriteUninstaller "$INSTDIR\${PRODUCT_UNINSTALLER}"
SectionEnd
Section "Uninstall"
Delete "$INSTDIR\${PRODUCT_UNINSTALLER}"
RMDir $INSTDIR
DeleteRegKey HKLM "${PRODUCT_UNINST_REGKEY}"
SectionEnd