I've never written an audio player with seek capability, but what I suspect is going on is this. Each packet of audio decodes into a snippet of the original sound wave. Normally, these snippets sequentially abut each other and the result is a continuous wave, which one hears as audio with no artifacts. When you seek, you force two snippets from disparate parts of the file to abut each other. This generally introduces a discontinuity into the resulting sound wave, which the ear perceives as a click or pop, or as you call it (I am guessing) an artifact.
Here's a more concrete example. Let's suppose that you have played the first 25 packets of audio before you seek. Let's say packet 25 decodes into a wave whose last sample is 12345. While packet 25 is being rendered to the speaker, you seek to packet 66. Let's say packet 66's first sample is -23456. Thus the digital audio stream jumps from 12345 to -23456 across the seek. This is a huge discontinuity, and will be heard as a pop.
I think one solution is to grab one extra packet before you begin to seek (packet 26 in my example), decode it to on offline buffer, apply a fade-out, and then put it into the playback queue. After you seek to your desired location, take the first packet (66 in my eaxmple), decode it to another offline buffer, apply a fade-in, and then put that into the playback queue. This should ensure smooth sound waves and artifact-free seeking.
If you are clever, you can make the fade-out and fade-in as short or long as you want. I think only a few milliseconds ought to be enough to prevent artifacts. You could even apply a cross-fade from the old and new packets. It might also be sufficient to merely note the last sample value in the last packet before the seek, and gradually step it down to zero over a few samples, rather than pulling it to zero immediately. This might be easier than decoding an extra packet.
This is my guess about how this problem could be addressed. This is clearly a solved problem, so I encourage you to also look at open-source audio players and see how they implement seeking. Programs like Audacity, Totem, Banshee, RhythmBox, Amarok, or VLC, or frameworks like GStreamer might be good examples to learn from. If you find they employ notable techniques, please report on theme here. I think people will want to learn what they are. Good luck!