A function is run as if it was instead placed where the function call was. Minus any picking. So it doesn't count as a toplevel event.
"Wait 0" is a fix since it waits to run the following actions and sub events till the end of the event sheet where created objects are pickable as normal.
As for what is happening consider
start of layout
---- create sprite
Before the event you can think of the state of the engine like this:
sprites=[0,1,2] // A list of all the sprite instances
picked=[] // A list of picked sprites
new=[] // A list of new sprites
Inside the event "picked" gets a list of all the sprite instances
sprites=[0,1,2]
picked=[0,1,2]
new=[]
The "create" action adds the the new object to "new" and picks only that.
sprites=[0,1,2]
picked=[3]
new=[3]
Then upon leaving the event the "new" list is moved to the "sprites" list:
sprites=[0,1,2,3]
picked=[]
new=[]
So the main point is the "new" list is only merged with the "sprites" list between toplevel events.