I don't quite follow. If you no longer need a cursor to be open, you should close it and the resources will be released. If you do need the cursor to be open, then you surely don't want the procedure to close it.
What do you mean by "no provision for rollbacks in a stored procedure?"
You certainly can issue a ROLLBACK statement if you need to. More usually, you just raise an exception and let the calling program do the rollback.
Maybe your problem is that you are not explicitly closing package-level cursors when exceptions are raised, e.g.:
PROCEDURE pr IS
WHEN ... THEN
Maybe I have missed the point totally. Perhaps you can give an example of a cursor and the conditions under which it is left open when it should not be.
Should the proceedures specifically open and close the resources?
here is an example of one of my proceedures:
create or replace procedure spInsertEmail
addressid OUT NUMBER,
ownerid IN NUMBER,
ownertype IN VARCHAR2,
isprimary IN NUMBER,
address IN VARCHAR2,
isconfirmed IN NUMBER,
confcode IN VARCHAR,
confattempts IN NUMBER
SELECT SEQADDRESS.NEXTVAL INTO addressid FROM DUAL;