No, your assumption is not correct. Why should the procedure roll back everything? If you want to have this behavior, set a savepoint at the beginning of the procedure and in case an error occurred, roll back to that savepoint.
Stored procedures are not different in any respect from transaction management. Each procedure call runs in the transactional scope defined by the caller. So whenever the caller commits or rolls back, that will determine what happens with the changes made inside the procedure. (It doesn't matter whether you have auto-commit turned on.) Furthermore, a stored procedure being basically just a container for a sequence of SQL statements can also execute a COMMIT or ROLLBACK. That has an impact on the caller's transaction. There is no autonomous transaction or so...