Thanks so much! Got it working.
It's probably not the best method, since I'm extremely unfamiliar with C++, but here's how I ended up doing it:
Define new Vector in view.cpp
Vector ev_permpunchangle;
Create a new function in view.cpp
void V_PermPunchAxis(int axis, float punch) {
ev_permpunchangle[ axis ] = punch;
}
Reference it and use it in ev_hldm.cpp
void V_PermPunchAxis(int axis, float punch);
...
V_PermPunchAxis(0, -5.0);
Add the vectors to cl_viewangles within view.cpp (just stuck this in under the other view kick parts)
VectorAdd ( pparams->cl_viewangles, (float *)&ev_permpunchangle, pparams->cl_viewangles);
*ev_permpunchangle = (0.0, 0.0, 0.0);
Had to zero out the permpunchangle after using it though as otherwise it'd constantly re-add the values and vertically rotate the camera endlessly. Interestingly enough, that still happens for horizontal movement, so I'll need to look into that some more. I also initially made the mistake of trying to add the vector to viewangles, which instead of moving your actual aim point, instead just adds a permanent offset between your aim point and the camera view center.
Thanks again for the help! Definitely would've got stuck on trying to do it server-side.