А вообще внутри ul увидеть что-то кроме li нельзя, из чего следует: последний дочерний элемент будет li. Это дает возможность использовать :last-child без опасений.
Можно использовать позиционирование, например, так. В вашей задаче это будет немного по-другому, но смысл, думаю, донесу: https://jsfiddle.net/wqLdb03x/3/
Текст выходит за пределы основного блока из-за явно заданной ему высоты height. Задавать высоту вообще не есть хорошо. Если нужно задать какую-то стартовую высоту, нужно использовать min-height.
Есть семантика. Есть БЭМ. Тот же article может быть внутри article, где он уже будет элементом. Не становитесь рабом БЭМа, он придуман для упрощения жизни, а не наоборот ;)