How to keep code and output organized?
Funny you should ask, because I'm currently answering this question as I take breather from a project involving just such a family of experiments and variations.

In my own self-organization, I typically distinguish two types of such variants.
If some variants are "dead" and would only be referred to on rare occasions for historical purposes, then they get checked into version control and deleted from my working set---they can be exhumed by the powers of SVN/git/Mercurial when needed.

For the "live" versions, some experiments get grouped thematically and some chronologically.  


Thematic is for when I'm it's a purely computer-based experiment (which can be re-run arbitrarily), e.g., "overlay-network", "random-network", "unit-disc-network"
Chronologically is for when my computer-based runs are based on real data from a physical system that can't be regenerated, but only replicated, e.g., "2013-05-09 Alphavirus", "2013-06-09 Alphavirus run #3", "2013-07-02 Repeats of Failed Samples"


I maintain a strong distinction between several types of files, which must never mix:


Core code: there is precisely one version of any core code system, maintained by version control.  If I need to maintain variants, they have to be set by option flags, not by forking the codebase (that way lies madness).
Each thematic/dated directory gets a README file, whatever notes are neecessary and (typically) two subdirectories: experiments and analysis
Experiment scripts for a thematic cluster live in the experiments directory
Each batch of experimental data lives in its own subdirectory of the experiments directory where its script lives.
Analysis contains scripts to process the experimental data.  Often there are two layers: one to process raw data into results, and another to plot the results.  This is because extracting results is often time intensive and figures are frequently tweaked.  If there are a lot of results files, they get their own subdirectory too.
Plots, living in a subdirectory of the analytical scripts directory


I also typically maintain a few master scripts which allow me to re-run large swaths of experiment / analysis when the core code is improved or a bug is found, which happens more frequently than one would like.