I didn't and don't now have a good answer for creating nice smooth curved holes/depressions in geometry, curves sticking OUT is easy. The solution I use (when I think I HAVE to) is using 8 sided Cylinders or Spheres to boolean > Difference. As the 8 sides are 'easy' to sew into a quad, leaving you with topology that smooths well. Yes I do this by hand using the split poly tool!
Works ok as I can simply slide my division levels up and down depending how close I'm going to get to my model so my curves don't look faceted up close and I have low poly objects from a distance.
Thing is halfway through fiddling and after posting prematurely here, I only THEN decided to look at one of my sons lego bricks and realised once again my advice to a fellow greenie was full of crap (been doing that a bit lately), the inside/bottom of a lego brick doesn't look like I modelled it. You should just use pipes underneath and cylinders on top? Well thats what I thought and I didnt want to embarass myself again
So I went on to something else.
What did you do in the end??
Learn from others mistakes, it takes too long to make them all yourself.