They're somewhat hard to explain, but I'll try to give a short tutorial here, since I was just working with them recently.
Basically, they act as a canvas that you can draw other things on top of. Why is this useful? Say you have a complex background with 20 layers, but none of them move at all. I know, stupid, but work with me for now. You can simply draw all those onto a render target, then draw the target to the screen in DrawLoop rather than the 20 individual layers. This saves the processing power of drawing 19 images. Very useful with DrawText, since that function is pretty memory-heavy.
Another usage would be drawing a multi-layered background onto a render target, then loading it as a texture for an effect object, which you can then manipulate the vertices on, while each layer still animates individually!
All in all, it's not too useful, but it does have its situations. So how do you use it? It's easier to show example code, so here we go.
In @Initialize:
CreateRenderTarget("bg", 512, 512); // this creates the target, 512 by 512 pixels, and calls it "bg". Easy.
SetRenderTarget("bg"); // this sets it as the active drawing surface.
// (things like SetTexture, SetGraphicRect, etc. go here - the same as if you were drawing something normally.)
DrawGraphic(200,200) // draws the graphic at coordinates 200,200 of the render target, not the game field.
// (drawing more layers on it goes here. Draw as many things as you want.)
SetRenderTarget("DEFAULT"); // changes back to the default render target, which gets automatically drawn onto the playing field every frame. Make sure to do this when you're done drawing on a target.
In @DrawLoop:
SetTexture("bg"); // sets the texture to the render target we drew on before
SetGraphicRect(0,0,512,512); // normal drawing stuff here.
DrawGraphic(GetCenterX,GetCenterY); // draw it to the game field like normal - because we set the target back to "DEFAULT", DrawGraphic behaves like you're probably used to.
Other notes: If you're going to change what's drawn each frame, use ClearRenderTarget("bg"); each frame before you draw onto it to erase what was there from the previous frame. If you're loading it onto the texture of an effect object and it's changing each frame, remember that you need to use ObjEffect_SetTexture every frame so it loads the new texture (and you also need to re-declare the SetVertexUV's every time you change the texture).
That should be it. If you don't understand it, the best thing is just to experiment.