Как ограничить вызов метода владельцем объекта?
Вариант первый — минимальная защита от индуса:
class Event {
  public void subscribe(...) {}
}

class OwnedEvent extends Event {
  public void fire(...) {}
  public void addReaction(...) {}
}

Владелец события создает объект класса OwnedEvent, но перед передачей его другим объектам приводит к Event. При попытке приведения события обратно — больно бить по рукам.

Вариант второй — максимальная защита от индуса, но с повышенным расходом памяти.
class Event {
  public void subscribe(...) {}

  public static class Owner {
    private final Event event = new Event();

    public void fire(...) {}
    public void addReaction(...) {}

    public Event getEvent() { return event; }
  }
}

Смысл в том, что при таком подходе класс Event.Owner должен иметь доступ к приватным полям класса Event, чем и можно воспользоваться.

PS на Java не писал ничего уже 4 года, могу накосячить с синтаксисом. Надеюсь, это не помешает пониманию написанного.
Мне кажется тут некоторое смешение понятий. Модификаторы private/public нужны в момент написания кода, для того чтобы проверить что программисты правильно понимают задачи.
В рантайме они не нужны. Пометить как-то в момент написания классов инстансы этих классов при помощи ключевых слов нельзя.
Если нужно отличать инстансы Person друг от друга (например, чтобы один отреагировал на событие, а остальные нет) заведи в этом классе поле с уникальным идентификатором и проверяй в рантайме права доступа на их основе.