I don't like the existing answers. First, I'll tell you why. Then, I'll offer my own solution.
First, this is not something for which any addons are required, and installing addons when it can be done simply isn't necessary.
Second, rotation around pivot points gives strange interpolation when used in an animation. The reason for that is because it's not straight rotation, but a combination of rotation and translation. There are times that it will work fine, depending on local axes, but times that it will work confusingly wrong.
Third, rotation about arbitrary axes can also give strange interpolation, when using Euler angles (and the absence of any bones in your pictures suggests that you're using Euler angles for your transforms.) Rotating about arbitrary axes when using Euler angles can easily give you confusing weirdness as well-- best demonstrated by "rubik's cube" animations.
So, what is the solution I'd advocate? Basically what you started with, but couldn't quite finish: a pair of empties and constraints. Start with the pair of empties you have, one at either point that defines your axis. Nothing is parented yet. Next, give one empty a damped track targeting the other empty. Finally, parent the object you wish to rotate to the constrained empty. To rotate the object, rotate the parent empty in its local Y axis. (You may wish to give this empties transform locks to prevent rotation in other axes and possibly translation/scale; you may wish to set deltas for it as well.)
This requires no addons, using only standard Blender tools, and gives you good interpolation regardless of transformation mode and axes, because all of your rotation will be in one local axis of your empty.