I haven't tried it myself, but if you can access the MeshInstance of the object, I think you can use the get_aabb
function (documentation) to get the size of the mesh on the Y axis and then position it relative to that. Something like this:
var mesh_node = $MeshInstance
var effect_position = mesh_node.global_transform.origin
effect_position.y += mesh_node.get_aabb().size.y
Then I think it will be at the same height as the highest point as the mesh.
You could also potentially unproject and use 2D animations instead. What I think may be a little harder with that solution is if the camera moves, as then you would need to perform the unprojection code again so it's still in the right position on the screen. It should be doable though.