There are basically three different (scriptless) solutions to achieve your end goal, and they're all going to be subtly different.
The first option, which you've started thinking about, is to use two different soft body objects, and to use goal to limit the motion of the interior body. First, create a vertex group on your outer body (named "location"). Then, give your interior body a Copy Location constraint, targeting the outer body, and specify "location" as a vertex group. This will allow the inner body object to acquire the position of the outer body vertices (average). Then, simply enable goal on the inner object and tune parameters:

Note that there is no real collision, and strong motion can still override any goal of less than 1.0. You can consider adding collision to the outer body, although it can impact performance heavily, and you risk trapping the inner body outside of the outer body whenever collision fails.
There are alternatives to a copy location constraint, including vertex parenting. The main thing is, you need to follow the soft-body-deformed vertices, not the object.
The second way to do this is to use collision. When I'm doing interacting soft body simulations, I like to use a single soft body with self-collision-- I find it's more reliable:

The most important parameter there is "ball size". Soft body collision is actually collision between invisible spheres centered on each vertex. As you increase the ball size, collision will improve, but the interior ball will be constrained to a smaller and smaller interior area. As you decrease ball size, the interior ball will become more able to reach the outside surface, but some of the balls might be able to slip between gaps, causing your collision to fail. If you need higher quality collision, you need more verts, with small ball sizes, so that each vert can have a small sphere without leaving any gaps.
The third way to do this is by creating springs inside of your soft body to join the inner sphere to the outer sphere-- to hold it inside, and to transmit forces. For this, I'm going to have a single soft body object, and in addition, I'm going to make it non-rendering, with a viewport wireframe display-- I'll use surface deform modifiers to copy whatever the soft body does onto a rendering mesh. Why? Because we're going to massacre its topology.
Start editing the combined softbody. Create additional edges between the vertices of the inner sphere and the outer sphere. Not faces-- just edges. Soft body physics works by transmitting forces along edges, and so this will create forces between the inner and the outer sphere. In this pic, I've created 14 new edges:

There is one other solution I should mention, which is the simplest and fastest, but also the least physical. That would be to just use soft body physics on the outer sphere and to create the inner sphere by a post-physics Solidify modifier with a material offset.