Событие - это функция.
Передать данные в функцию можно только двумя способами:
1) Через параметры.
2) Через пространство имён, в котором находится функция. Сюда входят глобальные переменные.
Так как это событие, то аргументы функции вы не контролируете. Остаётся только второй вариант. Третьего варианта не существует.
При хранении данных в глобальном пространстве остаётся вопрос способа хранения. Можно создавать отдельные глобальные переменные (ваш вариант 1), или можно хранить переменные в объектах DOM (ваш вариант 2). По сути DOM - это помощь вам в структурировании данных, ну суть та же, т.к. доступ через глобальную переменную (document).
Можно использовать промежуточный вариант. Создать глобальный объект { } - и в нём придумать свою структуру, какая вам будет удобна. Какие там будут идентификаторы, как осуществляться добавление данных и поиск - вам решать. Можете сделать всё красиво и удобно. Это как бы ваш личный неймспейс для конкретной фичи. От жёсткой структуры DOM вы будете независимы.