Snapping functions can’t snap to the intersection of the transform and the snapping element normal, unless it happens to be in 90° angle, which is useless.
Would either have to cut with the knife (K) for example to give another suitable snapping target, or use different cutting options to make the form
Duplicated the top and bottom faces from the target and made them bigger. Those are used as cutting geometry. Used ctrl+F -> intersect (boolean) for that. Could have also used intersect (knife) and knife project https://www.youtube.com/watch?v=lpgElM1KMHQ https://www.youtube.com/watch?v=Av8SiuDrvjM
The second one is easy. Face snapping in object mode, with rotation option enabled. Could then offset the object by moving it along the object’s local axis. That’s done by having transform orientation set to global or local from the header and then pressing the axis key twice: G, Z, Z moves along local Z. With manipulators that needs to be set to local.