Hi Mike (and welcome to SCF)!

Please, have a look at JointPushPull and ToolsOnSurface plugins.

You mention "offset" but what you describe is rather the PushPull function (can be done with the first plugin linked) however to make it complete, the second one can do offset on curved surfaces...