pl/pgsql functions require you to define the schema that it returns in the declaration itself; this isn't an issue really as it should more or less be known after you've writing the guts of a query, but it's just more boilerplate.
the key difference is the multiple result sets with different schemas (which you can do with stored procedures but not with functions)