You can achieve a variety of complex shapes using the boolean modifier.
Then you can clean up the topology and prepare the model for the Sub-D modifier.
Or you can just avoid cleaning the topology altogether, and use the Remesh modifier instead (like I just did): example1.blend (180.6 KB)