A contact group is, simply put, a collection of contacts. If you're using E9, then it'd be simple to say that when creating a Distribution List and Segment in E10, instead of adding contacts individually, you can add a group of contacts already created earlier or through Contact Filters. This is similar to the contact groups we have in our smartphones.
A Custom Data Object (CDO) is additional records of information about a contact. Contact fields in Eloqua are limited - around 250. That's when these come into play. They can be used to store and track a contact's preference / event registration etc., CDOs help us keep our contacts database organized and enable us with segmenting our contacts better. Typically, they are used as an additional storage for contact details.
Hope this answers your question.
This outlines a lot about CDOs Best Practice – Custom Data Object Records (Data Cards) - Definition and Recommendations for Usage that may help you. A CDO is much more than a contact group and can be leveraged in many different ways.