Here's a way to do it by computing the length of $\vec{a} + \vec{b}$ in two different ways: one of which is purely symbolic and the other uses some geometric knowledge.
This argument is somewhat similar to Stephan Kubicki's argument, just with a $+$ instead of a $-$ .
$\vec{a} + \vec{b}$ can be defined geometrically and component-wise in a straightforward way.
First a word on notation, $a$ means the vector $\vec{a}$ to reduce visual clutter. Additionally, I'll be using $\langle x, y \rangle$ consistently to represent the dot product $x \cdot y$ .
The very first thing I think is to define the inner product (101). In this definition, $n$ is the number of dimensions.
$$ \langle a, b \rangle \stackrel{\text{def}}{=\!=} \sum_ {k =1} ^ n a_kb_k \tag{101} $$
In order to motivate this definition, one can show that the squared length of a vector is the dot product of $a$ with itself (102).
$$ |a|^2 = \langle a , a \rangle \tag{102} $$
As another bit of motivation, you can also show that two vectors are perpendicular if and only if their dot product is zero and work through a couple of examples (111).
$$ \text{$x$ and $y$ are perpendicular} \iff \langle x, y \rangle = 0 \tag{111} $$
With that out of the way, we can ask about the squared length of $a+b$ (103).
$$ |a+b|^2 \tag{103} $$
This is equivalent to the dot product of $a+b$ with itself (103a).
$$ \langle a + b, a + b \rangle \tag{103a} $$
First, let's look at this problem symbolically. You can distribute over the left and right arguments (104)
$$ \langle a +b, a+b \rangle = \langle a, a \rangle + \langle a, b \rangle + \langle b, a \rangle + \langle b, b \rangle \tag{104} $$
I think it's straightforward to show that $\langle a, b \rangle = \langle b, a \rangle$, giving (104a).
$$ \langle a +b, a+b \rangle = \langle a, a \rangle + 2\langle a, b \rangle + \langle b, b \rangle \tag{104a} $$
Next, ask students to picture computing $| a + b | $ by splitting $b$ into two vectors, one of which is parallel to $a$ (let's call it $b_\text{sam}$) and one of which is perpendicular to $a$ (let's call it $b_\text{dif}$) (105). For this sort of argument I think a picture would help.
$$ | a + b | = \sqrt{ |a + b_\text{sam}|^2 + |0 + b_\text{dif}|^2 } \tag{105} $$
If $\theta$ is the angle between $a$ and $b$, then we can rewrite this expression.
$$ | a + b | = \sqrt{ (|a| + |b|\cos{\theta})^2 + (|b|\sin{\theta})^2 } \tag{105a} $$
Next we can expand it out.
$$ | a + b | = \sqrt{ (|a||a| + 2|a||b|\cos{\theta} + |b||b|\cos{\theta}\cos{\theta}) + (|b||b|\sin{\theta}\sin{\theta}) } \tag{105b} $$
We can exploit the fact that $\cos{\theta}\cos{\theta} + \sin{\theta}\sin{\theta} = 1 $ (105c).
$$ |a+b| = \sqrt{|a||a| + 2|a||b|\cos{\theta} + |b||b|} \tag{105c} $$
Square both sides (105d)
$$ |a+b||a+b| = |a||a| + 2|a||b|\cos{\theta} + |b||b| \tag{105d} $$
Use the dot product instead of the squared length (105e).
$$ \langle a+b, a+b \rangle = \langle a, a \rangle + 2|a||b|\cos{\theta} + \langle b, b \rangle \tag{105e} $$
Next we compare the (105e) and (104a), reproduced below for convenience.
$$ \langle a +b, a+b \rangle = \langle a, a \rangle + 2\langle a, b \rangle + \langle b, b \rangle \tag{104a} $$
$$ \langle a+b, a+b \rangle = \langle a, a \rangle + 2|a||b|\cos{\theta} + \langle b, b\rangle \tag{105e} $$
Therefore, as desired, $ \langle a, b \rangle = |a||b|\cos{\theta} $ .