Some things to consider: when inserting an automatic numbering object, one can select a cell tag as an attribute of the target, and then the inserted counter becomes a link to that object. When clicking the counter to follow the link, you can execute FrontEndTokenExecute[nb, "HyperlinkGoBack"] to return to the cell the counter is in.
So you could make this go-back functionality part of a button in a cell frame label for the style definition of a reference, for example. But a style definition will not resolve the need to properly identify the target cell when inserting the citation. That still requires user interaction. You can define that interaction to begin by selecting the target cell, which could get an automatically created unique cell tag written to it, and then prompt the user to insert the citation, which would be written as a counter with that same tag.
Methods of managing cell tags include:
FrontEndExecute[FrontEnd`SelectionAddCellTags[nb, "MyTag"]
FrontEndExecute[FrontEnd`SelectionRemoveCellTags[nb, "MyTag"]
SetOptions[NotebookSelection[nb], "CellTags" -> "foo"] (* or "CellTags" -> {"foo", "fun"} *)
CurrentValue[NotebookSelection[nb], "CellTags"]
Brian mentioned CellIDs; an example of searching for those would be:
NotebookFind[nb, 426769483, Next, CellID]
AK