I did a little testing and noticed a few things.
- Firstly FindFirstFileW and FindNextFileW will find . and .. as well
- I forgot to append the path with slashes
js code:
RemoveDirectory('C:\\Documents and Settings\\__________\\My Documents\\New Folder', true);
 
function RemoveDirectory(sPath, bFirstFolder) {
    sPath='\\\\?\\'+sPath;
    var WIN32_FIND_DATA = Interop.Allocate(592);
    var hSearch = Interop.Call('kernel32', 'FindFirstFileW', sPath+'\\*', WIN32_FIND_DATA);
    var hResult = -1;
    var sFile;
    while(hResult != 0){
        sFile = WIN32_FIND_DATA.ReadString(44);
        if (sFile !== '.' && sFile !== '..') {
            if(!(WIN32_FIND_DATA.ReadDWORD(0) & 0x10 /* FILE_ATTRIBUTE_DIRECTORY */)){
                Debug.Trace(sPath+sFile);
                Interop.Call('kernel32', 'DeleteFileW', sPath+'\\'+sFile);
            } else {
                Debug.Trace(sPath+sFile);
                RemoveDirectory(sPath+'\\'+sFile false);
                if ( Interop.Call('kernel32', 'RemoveDirectoryW', sPath+'\\'+sFile) === 0 ) TraceWin32Error()
            }
        }
        hResult = Interop.Call('kernel32', 'FindNextFileW', hSearch, WIN32_FIND_DATA)
    }
    Interop.Call('kernel32', 'FindClose', hSearch);
    if (bFirstFolder === true) Interop.Call('kernel32', 'RemoveDirectoryW', sPath)
}
 
function TraceWin32Error(){
    var LastError = Interop.GetLastError();
    if(LastError != 0) {
        var MsgBuffer = Interop.Allocate(1024);
        Interop.Call("Kernel32", "FormatMessageW", 0x1000, 0, LastError, 0, MsgBuffer, 1024, 0);
        Debug.Trace(MsgBuffer.ReadString(0));
    }
}
No idea if this will work I would have to do a bit more troubleshooting as to why it doesn't.