cygstart doesn't accept URLs with # (even when using file: protocol), so trying to use help umask shows messages like the following.
~ $ help umask
Unable to start 'C:\cygwin64\usr\share\doc\fish\commands.html#umask': The specified file was not found.
Fixing this could be tricky, but I think it could be possible.
Windows itself supports "running" a file URL with a fragment. For example, typing "file://C:/cygwin64/usr/share/doc/fish/commands.html#umask" in the Windows Run dialog works just fine, although it appears to ignore the fragment. It even works with backslashes, e.g. "file://C:\cygwin64\usr\share\doc\fish\commands.html#umask".
The underlying problem seems to be that cygstart translates the file URL into a plain Windows path, i.e. "file:///usr/share/doc/fish/commands.html#umask" becomes "C:\cygwin64\usr\share\doc\fish\commands.html#umask" and thus because it is no longer a URL Windows considers the fragment as part of the filename.
Ideally, cygstart would translate the path and then re-add the "file://" prefix, which would at least open the file even if it doesn't navigate to the anchor.