Понятие одушевлённости/неодушевлённости очень хитрое. Руководствуясь суждением "что живое — одушевлённое, а неживое — наоборот" можно попасть в языковой капкан. К примеру, растения в языке неодушевлённы, хотя они являются представителями отдельного царства живых организмов.
Мне кажется, что существительные "покойник", "мертвец" и подобные являются одушевленными из-за нашего мировоззрения, нашей культуры, что, безусловно, перешло и в культуру речи, закрепилось в ней. Понимая, что такое смерть, мы всё равно говорим о покойниках и мертвецах как о живых, то есть одушевляем их.
Кроме жтого, существительными "мертвец", "покойник" обозначают умершего человека, а признак "человек" является ключевым для значения одушевленности. А вот слово "труп" имеет значение "тело умершего организма", то есть речь идет только о материальном объекте, поэтому оно неодушевлённое.
Снеговик одушевлён по признаку подобия человеку (как, в прочем, все мифические существа и сказочные персонажи, пусть даже некоторые из них человека не напоминают внешне). Если же они не похожи на человека внешне, то наверняка совершают действия, которые свойственны человеку (разговаривают, к примеру).
Конечно, это упрощённое объяснение, но согласно этому утверждению можно объяснить одушевлённость таких существительных, как "кукла", "робот" и проч. Этот вариант объясняет одушевлённость, к примеру, шахматных фигур (я забираю (кого?) твоего ферзя, ты забираешь (что?) мою ладью), а также карт (у меня нет (кого?) пикового короля) и т.д.