Best/ preferred way of storing Image references?
If you need multiple strings, why not use CollectionProperty? bpy.types.PropertyGroup comes with a StringProperty already (name), then just add new items to the collection and assign an image's name.

*VectorPropertys shouldn't be used if the amount of integers, bools or floats aren't limited conceptually. They are meant to store things like transformation matrices, which are never larger than 4x4.

Since image datablocks are ID types, why don't you add an IntProperty and assign a number, then sort images by that? Set the default to -1, and ignore these to distinguish unrelated images from your project images:

import bpy

# Register property - should be in register()
bpy.types.Image.project_id = bpy.props.IntProperty(
    default=-1,
    min=-1
)

# Assign number
img.project_id = ...

# Filter and sort
sorted(filter(lambda x: x.project_id &gt; -1, bpy.data.images), key=lambda x: x.project_id)