Influence vertices in a given direction
The idea behind your loop works.

The direction should probably be calculated with mathutils.Vector.angle so that you don't have to consider the vector length:
angle = normal.angle(verts[y] - deformed_verts[x], 0)



I used the Animation Nodes setup attached below for the example. The principle behind it translates to code like this:

for outer_vertex in outer_vertices:
    influencing_vectors = []
    for (i, inner_vertex) in enumerate(inner_vertices):
        normal = inner_object.data.vertices[i].normal
        distance = distances[i]  # would be supplied by your script
        angle = normal.angle(outer_vertex - inner_vertex, 0)
        if angle &lt; pi/8:  # or whatever angle you choose
            influencing_vectors.append(normal * distance)
    translation = functools.reduce(operator.add, influencing_vectors, Vector((0, 0, 0)))
    if len(influencing_vectors) &gt; 0:
        translation /= len(influencing_vectors)
    outer_vertex_new = outer_vertex + translation


I didn't include any falloff for the angle which you might want to do.
The performance isn't that good and I expect this to be problematic for larger meshes. My original suggestion would have been to try ray_cast for each of the outer vertices. But the result of the ray_cast method will differ (and look worse when there are large curvatures).