Is it possible to safely and reliably maintain a reference to a blender object in python?
Use a PointerProperty

As pointed out in Is it possible to use bpy.props.PointerProperty to store a pointer to an object?  can point to any blender bpy.types.ID type object, in example adding an object_of_interest pointer to the scene.

import bpy
from bpy.props import PointerProperty


bpy.types.Scene.object_of_interest = PointerProperty(type=bpy.types.Object)


Run script above and test in python console below.

Starts off not set, None

&gt;&gt;&gt; C.scene.object_of_interest is None
True


Set it to the context object

&gt;&gt;&gt; C.scene.object_of_interest = C.object

&gt;&gt;&gt; C.scene.object_of_interest
bpy.data.objects['Cube']


Rename it

&gt;&gt;&gt; C.scene.object_of_interest.name = "Foogle"
&gt;&gt;&gt; C.scene.object_of_interest
bpy.data.objects['Foogle']

&gt;&gt;&gt; C.object
bpy.data.objects['Foogle']


Remove it

&gt;&gt;&gt; D.objects.remove(C.object)


Back to None

&gt;&gt;&gt; C.scene.object_of_interest is None
True


If we did this via reference ie

object_of_interest = C.object


deleting then re-referencing would mean death to blender.