На мой взгляд, это действительно вопрос повторного использования и абстракции. Если у вас есть проблема, которую вы можете решить очень общим способом, чтобы полученный код был полезен во многих других программах, поместите его в свой собственный модуль.
Например: некоторое время назад я написал (плохой) клиент mpd. Я хотел упростить синтаксический анализ файла конфигурации и параметров, поэтому создал класс, сочетающий в себе функциональность ConfigParser и optparse таким образом, который я считаю разумным. Требовалось несколько классов поддержки, поэтому я собрал их все вместе в модуле. Я никогда не использую клиента, но я повторно использовал модуль конфигурации в других проектах.
РЕДАКТИРОВАТЬ: Кроме того, мне пришёл более циничный ответ: если вы можете решить проблему действительно очень уродливым способом, спрячьте уродство в модуле. :)