Unwrap all UVs to fill picture, with overlapping UVs?
Quick script in order to select all islands and pack them individually based on How to get lists of UV island from Python script?. Credit goes to @Tlousky, I just added bpy.ops.uv.pack_islands():

UV layout before (left) and after running the script (right)

Just select your object in Object Mode and run the following script:
import bpy
C = bpy.context
o = bpy.data.objects[ C.object.name ]

# Go to object mode to read UV data
bpy.ops.object.mode_set( mode = 'OBJECT' )

uvLayer = o.data.uv_layers.active
uvs     = [ uvLayer.data[i] for i in range( len( uvLayer.data ) ) ]

others = uvs.copy()
islands = []

def select_island( uv ):
    uv.select = True
    bpy.ops.object.mode_set( mode = 'EDIT' )
    bpy.ops.uv.select_linked()
    bpy.ops.uv.pack_islands()
    bpy.ops.object.mode_set( mode = 'OBJECT' )

    return [ i for i, uv in enumerate( uvs ) if uv.select ]

for i in range( len( uvs ) ):
    bpy.ops.object.mode_set( mode = 'EDIT' )
    bpy.ops.uv.select_all( action = 'DESELECT' )
    bpy.ops.object.mode_set( mode = 'OBJECT' )

    flat = [ idx for isle in islands for idx in isle ]
    if i in flat: continue

    island = select_island( uvs[i] )

    exists = len( set( flat ).intersection( set( island ) ) )
    if island and not exists: islands.append( island )
    

#print( islands )
#print( &quot; number of islands: &quot;, len( islands ) )