Alas, most sparse matrix libraries use a format which makes very difficult to set elements dynamically (google for Compressed Sparse Row, which is the most common format).
As you said, most libraries provide you with all you requirements, except #1. For #2, it is usually easy once you understand the storage format.
Intel MKL provides the PARDISO solver which doesn't impose a format, it only requires you to be able to do matrix/vector products: you call the solver in a loop, get a return code from it, and perform what it asks you to do (multiplication by A, checking termination condition, preconditioning, ...). This way, you can use whatever storage scheme you need. It is useful when you don't want to store the matrix for instance, or if you have a funky storage format.
Your requirements (especially #1) makes an excellent candidate for quadtree based sparse matrices. However, I do not know any good implementation of this. If you manage to code it / find an implementation of it, I'd be grateful.