Charged particles (like electrons) can emit and absorb photons (electrons "couple to photons"). Imagine an electron emitting a photon and another electron absorbing it. Recall from relativity theory that even though photons are massless they carry momentum. Hence the first electron will recoil from emitting the photon and the second electron will recoil from absorbing it; this is simple conservation of momentum at each event (emission and absorption). Since we, the experimenters, don't see the photon (it doesn't propagate into our eyes), the process looks like two electrons repelling each other. At low energies (everyday energies) the combined effect of many such interactions reproduces the familiar Coulomb potential and inverse-square force law from classical EM.
The explanation behind "opposites attract" is slightly more complicated, but the idea of momentum transfer again plays a role. If you ever learn Quantum Field Theory (QFT), you will discover that the "opposites attract" rule has to do with the fact that photons have spin 1. On the other hand. gravitons have spin 2 and so gravity always attracts.
It is perfectly fine that photons have no electric charge. Momentum transfer has little to do with charge. In fact if photons were charged, we would run into problems with charge conservation: to emit a photon an electron would have to create new charge out of nothing. Since charge is conserved, photons must be chargeless. Charge tells us about couplings. If a particle (like an electron) is electrically charged, it couples to photons. If a particle (like a neutrino) is not electrically charged, it does not couple to photons. Since photons are uncharged, they do not couple to themselves; this really simplifies things in QED -- the quantum theory of EM. (On the other hand, QCD -- the theory of quarks -- is mediated by gluons which couple to "colored" particles. It turns out that gluons themselves are colored, so we get gluon-to-gluon couplings -- gluons emitting and absorbing other gluons -- and this effect makes QCD difficult to deal with.)