In a few places (Lemma 3.0.13 of this script, discussion after Lemma 3.2 here, Proposition 5 here, etc.) I've noticed a certain omission in the definition of a wedge product $\wedge\colon H^k(M) \times H^{\ell}(M) \to H^{k+\ell}(M)$ of de Rham cohomology classes. In particular, it is claimed that for closed differential forms $\omega_1 \in Z^k(M)$ and $\omega_2 \in Z^{\ell}(M)$: $$[\omega_1] \wedge [\omega_2] = [\omega_1 \wedge \omega_2]\,,$$ but only one direction of inclusion is proved.
I presume that $[\omega_1] \wedge [\omega_2]$ means (?): $$[\omega_1] \wedge [\omega_2] = \{(\omega_1+d\eta_1)\wedge(\omega_2+d\eta_2) \mid \eta_1 \in \Omega^{k-1}(M), \eta_2 \in \Omega^{\ell-1}(M)\}\,,$$ while $[\omega_1 \wedge \omega_2]$ is by definition: $$[\omega_1 \wedge \omega_2] = \{\omega_1 \wedge \omega_2 +d\eta_{12} \mid \eta_{12} \in \Omega^{k+\ell-1}(M)\}\,.$$ Then it is easy to show that for every $\eta_1, \eta_2$: $$(\omega_1+d\eta_1)\wedge(\omega_2+d\eta_2) = \omega_1 \wedge \omega_2 + d\eta_{12}\,, \text{with}$$ $$\eta_{12} = \eta_1 \wedge \omega_2 + (-1)^{k} \omega_1 \wedge \eta_2 + \eta_1 \wedge d\eta_2\,,$$ which proves $[\omega_1] \wedge [\omega_2] \subseteq [\omega_1 \wedge \omega_2]$. But the reverse is not proved!
How would one go about proving, given arbitrary $\omega_1, \omega_2$, that for every $\eta_{12}$ there exist corresponding $\eta_1$ and $\eta_2$?
It is standard to define the cup product $[\omega_1] \wedge [\omega_2]$ to be $[\omega_1 \wedge \omega_2]$. The "inclusion" that is being proved in these texts is not an inclusion at all, but a check that the operation is well defined. The main source of confusion, it seems, is that $[\omega_1] \wedge [\omega_2]$ is not {$(\omega_1 + d\eta_1) \wedge (\omega_2 + d\eta_2)$}, as you claim. Instead, $\wedge$ is being defined, and we are reusing the name.
As a brief reminder, say we have some function $f : A \to B$ and some equivalence relation $\sim$ on $A$. We can view $f$ as a function from $(A/\sim) \to B$ if and only if $f$ does the same thing to every equivalence class. That is if and only if $a_1 \sim a_2$ implies $f(a_1) = f(a_2)$. We do this because we need to know that $f([a])$ (which we define to be $f(a)$) does not depend on the choice of representative of $[a]$. The overloading of $f$ to mean both the function $A \to B$ and the function $(A/\sim) \to B$ has been the source of confusion in mathematics since it first became common. To clarify matters, let's write $\tilde{f} : (A/\sim) \to B$ defined by $\tilde{f}([a]) = f(a)$.
Now: we have a function $\wedge$ defined on differential forms. We would like to define a new function $\tilde{\wedge}$ defined on cohomology classes (which, recall, are equivalence classes). To do this we need to show that $[\alpha] \tilde{\wedge} [\beta]$ (defined to be $[\alpha \wedge \beta]$) is well defined. Of course, $\tilde{\wedge}$ is well defined if and only if we get the same output regardless of which representative we use.
Now, every representative of $[\alpha]$ looks like $\alpha + d\omega$, and every representative of $[\beta]$ looks like $\beta + d\eta$. So checking well definedness means checking that $[\alpha] \tilde{\wedge} [\beta] = [\alpha + d\omega] \tilde{\wedge} [\beta + d\eta]$. But by definition, this amounts to checking that $[\alpha \wedge \beta] = [(\alpha + d\omega) \wedge (\beta + d\eta)]$.
As you showed, $(\alpha + d\omega) \wedge (\beta + d\eta) = (\alpha \wedge \beta) + d\nu$, but this is in the same equivalence class as $\alpha \wedge \beta$. So $[\alpha \wedge \beta] = [(\alpha + d\omega) \wedge (\beta + d\eta)]$, and the function is well defined.
Somewhat unfortunately, working mathematicians seldom distinguish between $\wedge$ and $\tilde{\wedge}$ and we write $\wedge$ for both. This is useful, because they really are the same operation, and it would get annoying to have to write a bunch of extra squiggles all the time, but it is also confusing to students just entering the field.
I hope this helps ^_^