Your original posted code does not work as in the illustration. The function f and y are missing their arguments.
The reason it wouldn't work with f and y is that Manipulate localizes x0. This means the x0 symbol in the definition of y is a different symbol than the x0 in Manipulate.
Here's a way to get what seems intended:
f[x_] = x^2;
y[x_, x0_] = f[x0] + f'[x0]*(x - x0);
Manipulate[Plot[{y[x, x0], f[x]}, {x, -4, 10}], {x0, 0, 6}]