Assuming p, q had been defined this way :
p[x_] := x^3 + x
q[x_] := x^2 + 1
then Composition[p, q][x^3 + x, x^2 + 1] couldn't have worked because q had been defined as a function of one variable, this however would have worked :
Composition[p, q][x]
but to get what you intended (i.e. $g = p \circ q\;$) you would rather use :
g[x_]:= Composition[ Expand, p, q][x]
g[x]
2 + 4 x^2 + 3 x^4 + x^6
Another way would be to use pure functions, e.g.
Clear[ p, q, g]
p = #^3 + # & ;
q = #^2 + 1 &;
now we can use it like this :
g = Composition[ Expand, p, q];
g[x]
2 + 4 x^2 + 3 x^4 + x^6
In such a simple case as you consider you can also get rid of Composition defining g like this (it doesn't matter if p and q are pure functions or not):
Clear[ g]
g[x_] := p[ q[x]] // Expand
g[x]
2 + 4 x^2 + 3 x^4 + x^6
Composition is especially useful when you have a list of functions, e.g.
lf = {f1, f2, f3, f4, f5, f6, f7, f8, f9, f10};
then apply it to this list :
(Composition @@ lf)[x]
f1[f2[f3[f4[f5[f6[f7[f8[f9[f10[x]]]]]]]]]]
Edit
The original example in the question isn't especially interesting to demonstrate how Composition can be useful. Consider e.g. Laguerre polynomials, we define :
L[k_] := LaguerreL[k, #] &
e.g. :
L[5][x]
1/120 (120 - 600 x + 600 x^2 - 200 x^3 + 25 x^4 - x^5)
Plot[ L[#][x] & /@ Range[5], {x, 0, 3}, Evaluated -> True, PlotStyle -> Thick]

Now we can find compositions of subsequent Laguerre polynomials starting from 2- nd to n- th, e.g. :
GraphicsGrid[
Partition[
Table[ Plot[ (Composition @@ (L[#] & /@ Range[k, 2, -1]))[x], {x, 0, 1.5},
PlotLabel -> Range[2, k], PlotStyle -> Thick],
{k, 3, 6}], 2]]

We could get the same with other Mathematica functions like e.g. Fold, FoldList etc.
but Composition makes the task simpler and more straightforward.