the problem is that Construct 2 and 3 doesn't finish creating an object until immediately after the event where it is created.
So, you have to wait until the next top level event before you can "pick" the object (because by then construct has added the object into its internal list of objects - making it pickable).
there is nothing wrong with using functions as long as you understand that it is extending the event where the function is called from.
that means if you have an event that calls a function that creates an object, and that function calls another function, or you call a second function from the original event, construct executes all those actions as part of that first event, and doesn't finish creating any new objects until the event is completely finished.
The objects are automatically picked when you create them - the only way you can access the object from within a function call (within the same top level event as where it was craeted) is to pick the object by its UID. So you can pass the UID of the object to a function and use the UID to pick the object and work with it that way.
The only other option I know of is to add a "Wait 0 seconds" before adding additional actions/function calls. What that does is wait until the end of the current tick to execute those actions - which counts as a new top level event, and at that point the objects can be picked.
so, forget the wait for signal, try adding a "wait 0 seconds" before you call the second function.