This might be the simplest way to join two molecules, where you add the bond yourself graphically:
moleculeJoin[m1_, m2_] := MoleculeDraw @
StringRiffle[MoleculeValue[{m1, m2}, "IsomericSMILES"], "."]
Here I could do something like
moleculeJoin[Molecule["n-octanol"], Molecule["cysteine"]]

Or you could do it programmatically via something like
moleculeJoin[m1_, m2_, newBonds:{___Bond}] := Module[
{atoms, bonds, stereo, offset = AtomCount @ m1, mol},
atoms = Join[AtomList @ m1, AtomList @ m2];
bonds = Join[BondList @ m1,
BondList[m2] /. n_Integer :> (n + offset)
];
stereo = Join[m1 @ "StereochemistryElements",
ReplaceAll[m2 @ "StereochemistryElements", n_Integer :> (n + offset)]
];
mol = Molecule[atoms,
bonds,
If[Length[stereo] > 0,
StereochemistryElements -> stereo, {}
]
];
MoleculeModify[mol,
{"AddBond", newBonds /. Bond[{a1_, a2_}, rest___] :> Bond[{a1, a2 + offset}, rest]}
]
]
Using this form, you could join octanol and cysteine creating a bond between atom 6 in octanol and atom 7 in cysteine using
moleculeJoin[Molecule["n-octanol"], Molecule["cysteine"], {Bond[{6, 7}, "Single"]}]
Hope that helps.