Is this just the white gelcoat that is stained? If so, you have plenty of options. (If not, ignore this post, since it won't help you.) The first, of course, is to try to remove the stain, but I'm assuming you've already exhausted your options there.
How big of an area are we talking about here? You may be able to wet-sand with a fine-grit sandpaper to remove the stain if it is only on the surface. Be aware that the gelcoat may be very thick here (giving you plenty that you can sand pretty deep to get rid of the stain), or it may be very thin (meaning that you can only take a very thin layer off the top). Just work slowly and evenly, and if you don't see the stain lightening up pretty quickly, it may be too deep for this to work at all.
If you do have to sand all the way through the gelcoat, then you'll have to move onto plan B, but having sanded through the gelcoat doesn't give you any problems that you didn't have when you started the project. So, it doesn't hurt to try.
After sanding out the stain, you can move to the finest grit sandpaper you can find, and wetsand to a glossy finish. (Or, you may find that it already matches the glossiness of the surrounding surface.) Finish up with a polish if you want.
If you opt not to try wetsanding, or you sand all the way through the gelcoat, then you're going to have to cover it up. One possibility is to use a gelcoat repair putty, though it's hard for me to recommend this approach without seeing what you're dealing with. But, it goes like this:
Sand out the whole stain area with a medium-grit sandpaper so that all/most of the gelcoat is removed down to the fiberglass. Then, using a wide squeegee, spread a thin layer over the area, being careful to squeegee as flat as possible, even if this means that some of the fiberglass is still showing through. When that cures, sand it as smooth as possible, then, if needed, squeegee on another very thin layer. Repeat this as many times as needed. (Usually 2-3 times maximum.)
You can actually make some pretty large and invisible repairs this way. You'll finish it up with successively fine wetsanding until the surface is perfect. Very easy to do actually. Don't let it bother you if the repaired area is somewhat whiter than the surrounding gelcoat. It will even out after a season or so.
I think your only other option is to paint. And, I think the only way to make an invisible cover-up is to paint the entire area. I just don't know any suitable way to match the surrounding area. Plus, paint will age differently from the surrounding gelcoat. So, even if it looks good now, after a few seasons it is likely to become more visible.
If you really don't want to paint the whole area, it might be possible to paint over a small area with an enamel, covering a generous area around the stain, then wetsand to feather the edges. It's worth a try if you want since you won't be any worse off for having tried it. If if doesn't look good, you can always just sand still.