I guess I'm struggling to picture what joinery you're describing ... so i'll go over the ones i can imagine...
So let's say a shelf style joint - for that, i'd just do a rabbet or dado - no concerns or round cutters in that situation.
If it's a mortise into one piece, like say a table leg and stretcher style joint, then I'd cut the mortise with what are called fillets in the corners. These are just little parts that the cutter extends past the actual square corner since it can't actually cut a square corner. This extra clearance allows something like a tenon with square corners to fit right into the mortise. While you said no gaps, this leaves very minimal gaps only in the corners and if you cut your tenons with enough of a shoulder, the gaps are completely concealed.
Now let's say something like a picture frame. here you can get creative and do some kind of fancy half-lap type joint with geometric shapes or something creative (think puzzle pieces, or old time wooden railroad track sections). These are pretty nifty.
Ok now let's talk what I think you might be thinking of ... a box type arrangement - where the two parts are mated at their ends like a drawer or box. If your CNC can machine the end of the board, you could cut some pretty nifty dovetail type joinery or box joints. But most machines can't. So let's go with what a "flat" machine could do ... box joints with those fillets above would definitely leave gaps. Fancy interlocking joints could be made up but it gets tricky going in 3D because one board lays flat and involves mostly Z-axis movements while the other board lays flat and involves mostly X/Y axis movement so the geometry would have to be drawn such that it allows for bit diameter (or strategic shallow rabbets that cover any fillets needed).
A simpler method, though, might just be a rabbet. That would be the simplest, no-gap, joinery method.