I cant "point" to anything in the ESPs from the ESM.
you can, to a degree.
lets say the esm has the following data:
MagicMenu
CombatMenu
MasterMenu
by itself, the esm does nothing, but it stores the data of all 3 menu messageboxes
you may also need global variables to keep track of which mods are installed. globals would also be in the esm
in the quest/script called "ControlQuest" it has something like this in stage 10 (by default it stays at stage 0 or is not even running)
if MagicInstalled == 1 && CombatInstalled == 0
MagicMenu.Show()
ElseIf MagicInstalled == 0 && CombatInstalled == 1
CombatMenu.show()
ElseIf MagicInstalled == 1 && CombatInstalled == 1
MasterMenu.Show()
so magic.esp changes the following:
global variable MagicInstalled = 1
ControlQuest.SetStage(10)
it will run through the quest and only show the magic menu
then sometime later along the user installs Combat.esp
Combat.esp makes the following changes to the esm:
CombatInstalled = 1
ControlQuest.SetStage(10)
it will run through the conditions again and this time it will run the master menu that has both magic and combat.
of course your scripts and quests will have to be able to account for multiple scenarios where the user has only installed one or the other, or installs either in different order.
but containing the entire mod in the esm allows either esp to access data of each esp (so long as the esp doesnt introduce new data).
because the esps are pointing to the same data on the esm, the value which returns on both esp's will be the same, hence they can query the same data so long as that data is in the shared master.