Why does lsof exceed kern.maxfiles?
lsof lists more than just file handles. Most notably, it includes program text mapped into all processes (e.g, the executable and all libraries it's using). There are a lot of these mappings in most GUI processes -- I count over 270 for the Finder, for instance -- and they don't consume file handles.

If you believe you are hitting the system's open file limit, go ahead and change kern.maxfile. However, it's more likely that you're hitting the per-process open file limit, which defaults to a lower number (7168 on my system) and can be changed using ulimit.