Вопрос: в return я умножаю два int, функция возвращает копию Factory, почему так?
Потому что ты так определил этот оператор. Написал бы
int Factory::operator *
-- всё было бы по-другому.
Если твой вопрос "почему это компилируется", то ответ -- потому что у Factory есть не-explicit конструктор, который можно вызвать с параметром типа int. Этот конструктор создаёт объект возвращаемый из оператора *.