I understand from your comment "Also still for whatever reason it doesn't allow me to reset the computer if I type "Exit", just hangs, until I reset manually via power button and it boots into windows." that you are using Win98 restart-to-MSDOS mode.
I must confess that I am not accustomed to using this mode, and in the past when I tried it a few times, I found it unreliable, with similar symptoms to what you describe. Also, from analyzing your MEM output, I suspect that at least some of the memory is wasted because you are using this mode (which essentially loads a DOS environment, on top of the already existing DOS environment created during initial boot). For example - why is IFSHLP loaded low? Why are there two instances of COMMAND? That alone eats 9KB of conventional memory. Also, it may be (although far from certain) that EMM386 would find more free memory blocks if you booted it clean rather than from 'restart to MSDOS'.
My Win98 SE system is set up not boot into pure DOS without loading Windows (BootGUI=0 in MSDOS.SYS); then if I want to run Windows, I do so manually (WIN.COM), and if I want to get back to DOS, I just restart the PC. All the configuration I want is set in CONFIG.SYS / AUTOEXEC.BAT.
If you find that you still need (not just want) more conventional memory (or need/want to use Smartdrive/Doskey, which you took out of your startup files), I would suggest you try the pure DOS approach, just to see if it makes a difference.
In the meanwhile, I can suggest the following additional changes:
- I would try EMM386 without the HIGHSCAN flag; this may actually decrease free upper memory (if it does, restore the flag)
- No need to run EMM386 AUTO from Autoexec; you can specify AUTO when first loading it in Config.sys (will not affect memory usage, though)
- Looks like APINIT is taking 2KB of conventional memory. Use LH to try to put it in upper memory.
- Load MSCDEX/CTMOUSE before APINIT (unless it was causing instability for you); generally it is best to load the large programs first, then the small ones, to reduce memory fragmentation (or you may end up with a situation where you have enough upper memory, but no contiguous block large enough to fit the program you're trying to load there.