The same, but more Mathematica-ish (working with functions, representing vectors as lists and using NestList instead of variables and looping-appending):
Clear["Global`"];
dt = .01;
velInit = {0, 1.2};
posInit = {1.0, 0};
f[pos_] := -pos/(pos.pos)^(3/2);
vel[{velP_, posP_}] := velP + f[posP] dt
pos[{velP_, posP_}] := posP + vel[{velP, posP}] dt
orbit = NestList[{vel@#, pos@#} &, {velInit, posInit}, 1500][[All, 2]];
Animate[ListPlot[orbit, Joined -> True,
Epilog -> {PointSize@.05, Purple, Point[orbit[[j]]]}],
{j, 1, 1500, 1}]

Edit
You may experiment with different initial conditions:
orbitFun[{velInit_, posInit_}] := NestList[{vel@#, pos@#} &, {velInit, posInit}, 1500][[All, 2]]
Manipulate[ DynamicWrapper[
Column[{Grid[{{"Intial Velocity", "Initial Position"}, {velInit, posInit}}],
Animate[ListPlot[orb, Joined -> True,
Epilog -> {PointSize@.05, Purple, Point[orb[[j]]]}], {j, 1, 1500,1}]}],
orb = orbitFun[{velInit, posInit}]],
{velInit, {.1, .1}, {1.2, 1.2}}, {posInit, {-2, -2}, {2, 2}}]

Edit
Code dissection
(* Your formula for "f" *)
f[pos_] := -pos/(pos.pos)^(3/2);
(* New vel based on old vel and old pos *)
vel[{velP_, posP_}] := velP + f[posP] dt
(*New pos based on old vel and old pos *)
pos[{velP_, posP_}] := posP + vel[{velP, posP}] dt
(* Now the tricky NetsList[] *)
(* It will recurse 1500 times storing in the results list the {vel, pos} for each iteration *)
(* Each itertion get feeded with the last iteration {vel, pos} and calculate the new one*)
(*AFTER it finishes, the [[All,2]] thingy will keep only the positions
and discard the velocities so that we can plot the pos list*)
orbit = NestList[{vel@#, pos@#} &, {velInit, posInit}, 1500][[All, 2]];
Animate[ListPlot[{orbit1, {orbit1[[j]]}}, Joined -> {True, False}, PlotStyle -> PointSize[.05], PlotRange -> {{-3, 3}, {-2.5, 2.5}}], {j, 1, Length[orbit], 1}]
close to what you wish to get? $\endgroup$