How to increase the spectral resolution?
You seem to have a good grasp of the tradeoffs. When using short-time Fourier analysis like you are, there is a version of the uncertainty principle at play. Increasing your time resolution (in your case, using a shorter DFT) results in coarser frequency resolution, and vice versa. That is, the time-bandwidth product is a constant.

The way to increase your STFT's spectral resolution is to increase the duration of time that the transform covers, as you noted. If you truly need to be able to resolve frequencies that precisely (within a few Hz of one another), then you need to observe them for a long enough period of time to discern them. If you know a priori some characteristics of your signal, and conditions are favorable (i.e. SNR is high enough), then you might be able to get the job done with coarser resolution (and therefore a shorter transform). 

For instance, if you know that your signal is likely to be a single tone somewhere in a particular band, and you want to know its frequency precisely, then you don't necessarily need to use a really long DFT. Instead, you can use a shorter DFT, then use peak interpolation techniques to give a sub-bin estimate of where the peak actually lies.