Add a group instance with python
This creates instances of the group, it works by first adding an Empty, and setting its .dupli_type and .dupli_group attributes. I believe for all intents this is functionally equivalent to a group instance.

import bpy

scene = bpy.context.scene

group = bpy.data.groups['CubeGroup']    
instance = bpy.data.objects.new('dupli_group', None)
instance.dupli_type = 'GROUP'
instance.dupli_group = group
scene.objects.link(instance)


(credit to: blenderartists.org user Atom)

For completeness, this is how to create groups via the API. This expects the name (string) of a group, and will add any objects in the objs collection to this group.

def to_group(named, objs):
    '''
    named:   (string) name of group to use, or to create if not present 
    objs:    a collection of object references
    '''
    groups = bpy.data.groups

    # alias existing group, or generate new group and alias that
    group = groups.get(named, groups.new(named))

    for obj in objs:
        if obj.name not in group.objects:
            group.objects.link(obj)