Force tablet UI on a non-tablet device?
After some digging I am able to sort out a relatively easy solution for the first and most important requirement, that is, keeping the navbar at the bottom. Requires root (of course - to pull and push files) and basic skill of using apktool.

For pre-compiled ROMs:


  
  Install apktool.
  Install your framework-res.apk by executing apktool if /path/to/framework-res.apk.
  Decompile your services.jar by executing apktool d /path/to/services.jar.
  Go to the decompiled services.jar.out folder and open smali/com/android/server/policy/PhoneWindowManager.smali.
  Search for 0x258 and replace the only occurrence of it with 0x0.
  Rebuild services.jar (preserve its signature) by executing apktool b -c services.jar.out.
  Decompile your SystemUI.apk by executing apktool d /path/to/SystemUI.apk.
  Go to the decompiled SystemUI folder, then go to res/layout/.
  Remove navigation_layout_rot90.xml.
  Make a copy of navigation_layout.xml and rename it to navigation_layout_rot90.xml.
  Rebuild SystemUI (preserve its signature) by executing apktool b -c SystemUI.
  Push the finished services.jar and SystemUI.apk back to where they were using a method of your choice, set correct permissions, then reboot.
  


For ROM makers:


  
  Open *build-folder*/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java.
  Search for shortSizeDp &lt; 600 and replace the only occurrence of it with shortSizeDp &lt; 0.
  Find the SystemUI layout files in *build-folder*/frameworks/base/packages/SystemUI/res/layout/ and replace, similar to the method for pre-compiled ROMs.
  Build the ROM.
  


Note that the default button layout doesn't look good under landscape mode, but one can always use the built-in navbar tuner in Android 7.0+ to tweak it to his desire.



As of Android 10, this has been simplified to a single boolean config config_navBarCanMove, which can either be set directly in the framework or separately in an overlay (recommended).