That's as to be expected - the call to the .seek() method will fire a subsequent "seek" event - hence you will get yourself into an never-ending loop.
What you need to do is to distinguish between a "seek" event being fired via code versus a user interaction, and then make the "onSeek" code conditional on this.
A simple way to do this is to attach a "click" listener to the JW seekbar HTML element - you can then detect that the seek was user initiated and perform your "re-seek" based on this interaction:
instance.on('ready',function(){
var container = instance.getContainer();
var slider = container.querySelectorAll('.jw-slider-container');
if(slider && slider[0]) slider[0].addEventListener("click", function() { instance.seek(2); }, true);
});
You then also don't need to include the "onSeek" listener function.