The reason why people need to perform several statements within a single stored procedure are varied. Although "best practices" might discourage that in many cases, other factors come into play.
For example, I recently wrote a stored procedure to move data from the current production database to a new database with a new schema. I probably have several hundred statements in just a few stored procedures. Much simpler than creating 100 temporary stored procedures and then writing an app to call these.
Another issue is performance. I have re-designed many sites due to the fact that they were exhibiting sluggish performance. In some cases, this was due to too many round trips to the database when more could be accomplished with one call.
Yet another reason is to provide more encapsulation in your stored procedures. Some changes are very easy since you need only change the implementation of a given stored procedure, without having to change the other layers of code at all. Even if this might break your perfect vision of a 3 tier design, in the practical world, it may save time and money. If your business objects encapsulate the logic, why should the caller care how that logic is implemented?
So if you are using a RDBMS with advanced capabilities (SQL Server, Oracle), there are still some pros and cons to weigh before establishing the golden rule.