As I am getting a close to filling up my NVRAM, I started looking at the TomatoUSB code, and ISTM that it would take very little work to avoid filling the NVRAM with all the default configuration values. This would free about 2/3 of my 32 KB. Perhaps I am missing something here, but as all the default associations are in the hard coded image, and as the values are manipulated in RAM at run time, would it not be really easy just to not write the default values when the NVRAM is committed? AFAIKS it would only require populating the RAM copy with the default values from flash at system initialization time prior to adding in the NVRAM entries. (There might be a minor complication with unset, but this would surly not be hard to fix.)
You are free to try and do a patched version of Tomato to do this. I tried this once in the past. One of the huge gotchas is some of the NVRAM settings are needed to be written to NVRAM in order for the router to start up correctly. The router will also automatically overwrite all NVRAM settings if you don't have some of the required values set. It can be quite a challenge to sort which is which. My initial thoughts when patching is when loading the nvram settings to automatically read a file in jffs with extra settings, and on commit write most out to a jffs file and just the required on boot ones to NVRAM. But I abandoned that approach because I was not comfortable with the fact that every time JFFS needed to be reformatted the NVRAM settings would only be in memory. Between that and the problem if correctly identify which variables where safe to store elsewhere I decided it wasn't worth the effort.