This is great work! I look forward to reading through the code more thoroughly.
In the long run we definitely need a chemical reaction data structure that can operate on a list of molecules to make this easier on you. Until we get that, another approach you could take for chemical reactions is using the "ReplaceSubstructure" method:
alkyne = Molecule["1-octyne"]
primaryalkylhalide = Molecule["benzyl bromide"]
The trick here is to join the two molecules into one disconnected structure, then search for a single substructure matching the bromly group and terminal alkyne, and replace it with the joined version:
joinMolecules[list : {__Molecule}] :=
Molecule@StringRiffle[MoleculeValue[list, "SMILES"], "."]
MoleculeModify[
joinMolecules[{alkyne, primaryalkylhalide}], {"ReplaceSubstructure",
MoleculePattern["[CH2][Br].[CH1]#[C]"] -> "CC#C"}]