The potential energy surface of the excited state in general does not resemble that of the ground state. So, saddle points can exist on the excited state PES at the geometries corresponding to the ground state minima. However, the most frequent source of negative frequencies when computing hessian numerically is just the numerical procedure as such. In your case, this is more likely, because, as you say, these negatives are small in absolute value. So, you are on a right way.
Try $FORCE purify=.t. $END This may help in addition to NVIB=2.
>-how do I extract last orbitals for MOREAD form that gianormous file? Any Linux based commands/tricks? I will need it for either geometry reoptimization or NVIB=2 anyways
If your calculation is CIS, you don't have to restart with MOREAD at all. In this case, you'll have to recompute the ground (HF) and excited states (CIS) at zero displacement (IVIB=0) first. This is not expensive (just one more point in addition to your 2*3N-point calculation of hessian with NVIB=2). To have hessian restarted with NVIB=2, just add $VIB group from IRCDATA and terminate it with $END.
The reason why your PUNCH file is so large is that for each displacement of each atom (2*3N points) both $VEC and $CISVEC are punched. Unfortunately, there is no way to cancel this (probably, Alex knows some secret ways :) ). For restarting hessian, you need $VEC from the zero-displacement point (IVIB=0) rather than from some last point corresponding to an arbitrary displacement of an arbitrary atom. So you may perform a single-point CIS calculation, save PUNCH for later hessian restarts and use MOREAD for orbitals and RDCISV for CIS vectors from this file.