How to deal with controling force by positioning oscillating magnet?
This answer is going to be rather abstract.
Let the direction your magnet travels be the x direction.
You have one known or knowable function from the position of the magnet to the force exerted.  So let \$F = f_{pf}(x)\$.  This function is monotonically increasing with \$x\$, which makes things easy.
You can calculate the position of the moving magnet with respect to the crank angle.  Let \$x = f_{a p}(\theta)\$.  Note that -- as discussed -- this is periodic on \$\theta\ \mathrm{mod}\ 2\pi\$ (and roughly, but not exactly, sinusoidal).  It's also going to be continuous. This means that  \$x\$ is constrained such that \$x \in [x_{min}, x_{max}]\$.  Working backwards, it means that \$F\$ is also constrained: \$F \in [F_{min}, F_{max}]\$.
This means that \$F = f_{pf}\left (f_{ap}(\theta) \right)\$
You want the force to be some periodic -- and presumably continuous -- function of time, and you're willing to live with the constraints on \$F\$.
So -- easy peasy.  Define your desired \$F(t)\$.  For any value of \$F\$ in the interval \$[F_{min}, F_{max}]\$ there exists not one, but two values of \$\theta\$ that give you that force.  So if you're at \$F_1, \theta_1\$ and you want to go to \$F_2\$, solve \$F_2 = f_{pf}\left (f_{ap}(\theta_2) \right)\$ for the two possible values of \$\theta_2\$ and choose the one that you'll get to first.
For a predetermined force vs. time relationship, solve \$F = f_{pf}\left (f_{ap}(\theta) \right)\$ for as many points as you need to get the precision you want for \$F(t)\$, making sure that \$\theta(t)\$ goes in a circle.  Then control your motor with a PID controller to make it follow your predetermined \$\theta(t)\$.