I think the problem is that the prefab can not see instantiated objects that are already in the scene. A way to think about this is: What would your game do if it instantiated the prefab in a scene without that other asset, even though you linked it in the prefab? "Well, I'm not going to do that though" is not a good excuse to the Unity Editor, for what reason I don't know.
My preferred method to get around this is to add a reference to the object at run-time. Depending on what you are working on, it might be as simple as:
//On the Gameobject in the scene
public void Start(){//you can use start, awake, or other event as needed
OtherComponentClassOfPrefab.staticSetupMethod(this.gameobject);//using a static method to pass this reference to other class.
}
//On the Prefab that uses the other object in the scene
public static staticSetupMethod(GameObject go){
go.Stuff();//do stuff to go, or store it for later use.
}
Again, depending on your setup, if a singleton works for you then you can pass the reference to the instantiated prefab directly through that. And if not, a variation of the above will go pretty far if you are creative enough with it. Hope that helps!