Как распаковать вложенный список?
Наверное, надо проверять элемент исходного списка, является ли он списком, и только тогда распаковывать?
Если уровень вложенности у нас один, то так и написать
chained = []
for item in posl:
    if isinstance(item, list):
        for subitem in item:
            chained.append(subitem)
    else:
        chained.append(item)
Это будет самый кондовый алгоритм. Задачу можно реализовать и короче, и оптимальнее. Но при изучении программирования надо сначала научиться составлять самому простейшие алгоритмы и их реализовывать, а не просто пытаться использовать по очереди какие-то магические заклинания - авось какое-то сработает. А если не сработает - то идти на Хабр, чтобы тебе его написали. 
Любой красивый код следует применять только тогда, когда ты понимаешь, как он работает, что делает внутри. А если не понимаешь, то лучше сначала разобраться, реализовать тот же алгоритм руками.  Иначе ты будешь не программист, а обезьяна с гранатой.   

Если вложенность неограниченная, то придется познакомиться с таким понятием, как рекурсия.
Вы можете определять тип элемента к которому обращаетесь и в случае если это список распаковывать его. 

Тип в условном операторе можно определить с помощью isinstance().  Допустим как--нибудь так:

new_posl = []
for i in posl:
    if isinstance(i, list):
        for j in i:
            new_posl.append(j)
    else:
         new_posl.append(i)