you can do what you want with spritebatch easily enough. what you need to to is have a 'fake' camera:
public class Camera
{
vector2 position;
vector2 scale;
float Rotation;
}
update the camera's properties as needed and then in your draw call do something like this
spritebatch.draw( (mySprite.Position - Camera.Position), (mySprite.Rotation- Camera.Rotation), (mySprite.scale- Camera.scale))
where mySprite.Position is a world position.
this code wont work it's just to demonstrate the basic idea. you will quickly find this gets difficult to manage and you'l probably want to implment a screne manager type class/service.
i'm building an engine that can do all of the things you want at the moment - see my sig for details - and i will update it soon with details of the screenmanager, renderingmanager and all the other bits soon.
See what I'm up to
here