Ohne Debug-Informationen geht es natürlich nicht, und mit Debug-Information wirst du dein Programm wohl kaum ausliefern.
Bei Exceptions, die von EExternal abgeleitet sind, so auch EAccessViolation, erhältst du über den Windows-
Exception-Record auch die Adresse, an der die
Exception aufgetreten ist (Zugriffsverletzung an Adresse XYZ...).
Diese kannst du dann versuchen auszuwerten, allerdings können sich die Adressen der Routinen bei jeder Kompilierung ändern.
Außerdem kann es passieren, dass die eigentliche
Exception in einer Hilfsroutine geworfen wird, die mit falschen Parametern aufgerufen wurde, zum Beispiel einer Methode mit nil als Self. Um da den Verursacher zu ermitteln, müsstest du einen Callstack erstellen.