Да, немного запутанно. Есть два возможных варианта.
1. We had to wait for two hours before another train came.
Нам пришлось ждать два часа следующего поезда.
В этом предложении глагол have используется в модальном значении (вынужденного) долженствования, но не является вспомогательным глаголом. Had -- форма Past Indefinite.
В данном значении (долженствование) have является модальным глаголом и не может использоваться во временах группы Continuous и Perfect Continuous.
2. We had been waiting for two hours before another train came.
Мы прождали два часа, прежде чем пришел следующий поезд.
В этом предложении have -- вспомогательный глагол, часть формы Past Perfect Continuous. Это время используется, так как ждали от некоторого момента в прошлом и до прихода поезда. Прошлое в прошлом.
Дополнение. We had to have been waiting -- неграмматично (нарушает правила грамматики, и так не говорят). Глагол have (в данном контексте) не следует путать с must, should и прочими, за которыми может следовать перфектный инфинитив. Have тоже используется с перфектным инфинитивом, но в значении "должно быть" (а не в значении "приходиться"). This has to be true. This has to have been true.