When applications share the same user id and are signed by the same entity, the can shared data. Then you just use the regular internal shared storage.
In the manifest, set the shared user id:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
</manifest>
http://developer.android.com/guide/topics/manifest/manifest-element.html#uid
The internal storage example is:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
EDIT
I don't know why having access to all the data is a bad thing. You DO own the apps so you control what they do. If you really want to limit the data that is shared, use a ContentProvider with Permissions that limit access or at least let the user decide who access it, AND encrypt the data. Alternatives: Store this data on a remote server and let each application sync that data into its own secure private storage.
How to restrict content provider data across applications