Retail spot-fx is already an otc-market contract with the broker that is rolled every day rather than settled, so the gap is narrower than the labels suggest. Both are leveraged, both are cash-settled, and both mark to market continuously.
The differences that matter in practice are three. Charging: spot FX usually pays or receives swap-rate on a rollover basis derived from the interest-rate-differential, while a CFD is typically charged a benchmark rate plus a broker spread, described in overnight-financing-charge. Contract specification: a CFD is defined in the broker's contract note with its own point value rather than in lots. And instrument range: the CFD wrapper extends to shares, indices and commodities, which spot FX does not.
Tax treatment also differs by jurisdiction, and in the UK the distinction between a CFD and a spread bet matters more than either against spot, as covered in spread-betting-tax-uk.
Example: holding 1 standard-lot of EUR/USD overnight might cost $7.20 of negative swap on a spot account, while an equivalent currency CFD might be charged $8.90 as benchmark plus 2.5% on the notional. Same exposure, different plumbing.
Related: cfd, spot-fx, overnight-financing-charge, swap-rate