Попросту говоря, структурное - без использования оператора goto, процедурное - с использованием подпрограмм, а модульное - деление программы на независимые части, каждая из которых выполняет свои задачи и передает результат другим модулям. Естественно, можно (и нужно) использовать все три принципа вместе.
Это не разница, а просто парадигмы, которые друг другу никак не противоречат. Структурное - иерархическая структура со вложенными блоками (пример: цикл внутри метода внутри класса). Процедурное - подпрограммы (пример: функции, процедуры). Модульное - разбиение программы на модули.