Processor check

Setup of NT 3.1 and 3.5 doesn't detect processors newer than the original Pentium, as well as some models of 386, 486, and Pentium processors. To bypass this, initial.inf and setup.inf needs to be edited: in both files, change the line STF_PROCESSOR = "" ? $(!LIBHANDLE) GetProcessor to STF_PROCESSOR = $(ProcessorID_I586). Use 386 or 486 instead of 586 if the OS is being installed on a 386 or 486. (source: BetaWiki, CC-BY-SA 4.0)

While BetaWiki says you should edit the files "after the first stage (in text mode) of setup is done", in my case neither WINNT nor SYSTEM32 existed in that stage, probably because i initiated setup via i386\winnt.exe in DOS. Instead, I copied installation media to the hard disk, and edited the files included in the copy, so that the setup would read the modified files from the very beginning.

To do that, use the expand command:

expand initial.in_ initial.inf
expand setup.in_ setup.inf
Delete the in_ files (otherwise the setup would still read the compressed, unmodified copy), and edit the expanded inf files.

"Incorrect HAL"

On a VMWare VM with two virtual CPUs, NT 3.5 would say HAL is incorrect when booting: "This HAL.DLL can only be run on MPS Version 1.1 compliant systems. Replace the hal.dll with the correct hal. System is HALTING". Expand hal.dl_ from the i386 folder of the installation media to hal.dll and overwrite %windir%\system32\hal.dll. The system would boot, but the downside is it would only recognize one CPU. While there is a setting in the BIOS to change the MPS version to 1.1 (the other option is 1.4), changing that has no effect.

NT 3.1 installation media doesn't come with a halmps.dll, but one can be obtained on archive.org. Using this HAL in a VMWare guest would give the same error as above.

Memory

NT 3.1 can only recognize 64 MB of RAM at most. To fix, copy ntldr and ntdetect.com from an installation of NT 3.51 SP5 or above. (source, technical details)

Large HDD

NT 3.1, even in setup, doesn't recognize partitions that start after the first 4GB of a hard drive.

NT 3.5 ~ 4.0 setups recognize such partitions, but the installed OSes still cannot boot from them. To fix, copy ntldr from an installation of NT 4.0 SP5 or above. (NTLDR is backwards-compatible even with Windows 2000)

NT 4.0 setup cannot recognize IDE hard disks that are 8 GB or larger. To fix, get atapi.sys from KB197667 or SP4 or later, and replace the copy in the i386 folder of the installation media. (see also: https://nt4ref.zcm.com.au/bigdisk.htm)

NTFS

Choosing to format the partition to NTFS, or convert from FAT to NTFS, might cause setup to say "setup was unable to open or access the setup CD-ROM or floppy disk". (Maybe this happened to me because the temporary partition used to store the setup files happened to be the partition I want to install NT onto.) If this happens, you have to keep the partition as-is, and convert later within Windows NT if desired.

Extended Kernel

NT 4.0 extended kernel

NT 3.1 Japanese

It seems that the Japanese version of NT 3.1 was a separate branch from the European language versions, with a higher build number 531 compared to the latter's 528. It seems that the Japanese version never received any service packs; I can only find service packs for the European language versions. Perhaps due to the higher build number, the English SP3 installer states that: "Setup has detected that the version of the system installed is newer than the update you're applying to it. The update can render your system unstartable. Press OK if you still wish to continue or press Cancel to exit Setup." Installing anyway and then restarting would result in a BSoD with error code 6B (PROCESS1_INITIALIZATION_FAILED). The BSoD mentions the following files: atdisk.sys, fastfat.sys, hal.dll, ftdisk.sys.

FS31UPD from NT 3.5 installation media can't be installed either, giving an error message of "このアップデート ディスクは、本機種に対応していません。" ("This update disk doesn't support this computer.") I had to manually copy the files to the corresponding locations specified in the update.inf file, after which it could successfully read NTFS partitions from NT 3.5 ~ 4.0. Interestingly, the files shipped with FS31UPD have a build number of 531.