Some key principles to do this are: object rotation, animating in another objects space, and 2 bone IK
1. First imagine the aim vector itself is an object which is roatating and that you can "parent" the gun under it. This is important because you want the recoil to animate in the space of the aim vector.
2. Next, animate the hands relative to the gun.
3. Read Ryan Juckett's 2 bone IK article here http://www.ryanjuckett.com/programming/analytic-two-bone-ik-in-2d/
4. The torso does look like it is just lerping to a specific pose when the angle of the aim vector crosses the horizontal axis. This is a good, simple way to do it. If you want continuous smooth pose changes you need to set up a series of poses you blend between which have their blend weights driven by the aim angle.