Is there anything a table-level constraint declaration can do that a column-level one can not do?
You've forgotten about other types of constraint than primary key (also applies to unique, check, and foreign key constraints) but that's basically it.

A column-level constraint can only reference the column that it is declared next to. A table-level constraint can reference multiple columns.