Sub-themes are not required to be in a sub-directory of the parent theme, in Drupal 6 and higher. Drupal 6 introduced the "base theme" property that should be used in the .info file of the child theme.
Creating a sub-theme says:
The sub-theme to-be should be located in its own directory. Prior to Drupal 6, this directory had to be a subdirectory of its base theme; in Drupal 6 and 7 it can be placed outside of the base theme's directory.
To declare your theme to be a sub-theme of another, it is necessary to alter the sub-theme's .info file. Add the following line to the sub-theme's .info to declare its parent or "base theme." Change "themeName" to the internal name of the parent theme (that is, the name of the parent theme's .info file, usually all lower case).
base theme = themeName
As per the directory where to put a theme, these are the directories where Drupal looks for a theme:
- profiles/$profile/themes
- sites/all/themes
- $config/themes
$profile is the machine name of the currently used profile, and $config is the directory containing the settings.php file currently used. The subdirectories of those directory are also checked, which means (for example) that sites/all/themes/custom/bluecheese could be used to contain a theme.
In any case, the modules directory is not checked, if it is not a sub-directory of one of the directories I listed before. I would rather avoid mixing modules and themes, or using "modules" as name of a directory containing a theme.