This is the method I use to color my sketches using Gimp. Basically what it amounts to is extracting linework from a scanned image, putting it in its own layer and then painting in shadows, highlights and colors behind it. I tend to paint using layer masks; filling a layer completely with a color/pattern and then masking out regions that shouldn't be visible, as opposed to erasing them. This is a non destructive way of coloring. It might seem like a chore but comes handly when you have a few dozen color layers with different blending modes. All you have to do is mask/unmask parts of the layer using white color to make things visible and black color to make things invisible.
Start by scanning a sketch in with at least 300dpi, preferably in a lossless format like png. Open it up in Gimp, go to the Channels tab and highlight all the channels except Alpha . Right-click on the selected channels and pick Channel to Selection. Then inverse selection:
Ctrl + I (Select > Invert).
Create a new layer
Ctrl + Shift + N (Layer > New Layer...). Name it something appropriate and set Layer fill type to Foreground color. Next, add a layer mask; make sure the newly created layer is selected in the Layers Tab, then do (Layer > Mask > Add Layer Mask). Tick the Selection option in the dialog that pops up and add the mask . Deselect everything
Shift + Ctrl + A (Select > None). Also, hide the original scanned image layer in the Layers tab.
At this point I usually paint midtones, shades and highlights under the linework. Then I overlay the entire thing with the original scan (in multiply mode) to give the lines some off-black color. To edit a mask, select it in your Layers tab. Any area filled with white is visible, any area filled with black is not.
To add color, either paint it in with a mask or use Path Tool
B to select a region and fill it in. If you accidentally loose your path selection you can always retrieve it from the Paths tab. Repeat for every major color you want to have in your image.