1. Тянулось бы довольно странно. Вы задаете margin, который высчитывает расстояние относительно ширины .container. Получается, чем больше элементов в списке, тем больше между ними расстояние.
2. Так как в качестве размера отступов используются проценты, то для начала браузер высчитывает размер блока .container. После того, как становится известна ширина контейнера, браузер может высчитать проценты от контейнера и применить их в качестве отступов для .sep:after, и разумеется, такой блок уже не помещается, так как при первоначальном просчете не учитывался отступ.
В данной ситуации, как «грязное» решение, можно задать для ul — width: 109%. Тем самым мы компенсируем то, что ширины контейнера недостаточно. Либо задайте для ul — white-space: nowrap. Но это плохие решение. Попробуйте подобрать решение, где вам подойдет фиксированная ширина контейнера.