In game engine with python, add appendage to object
These are two different tasks. Lets deal with them separately.

Grow

I suggest you let the objects grow via an animation (e.g. shape-key, armature). With that you have full control how it grows.

When you use scaling ensure the object origin is at the button of the plant as scaling is always relative to the origin.

Positioning

A simple solution is to check the ground "under" the object. Typically "under" is along -Z.

Perform a ray check along -Z starting from current position. Check for ground (property filter). Then you can place the object at the found hitPosition.

Check the BGE API for rayCast()

Example:

lookAtPosition = kelp.worldPosition.copy()
lookAtPosition .z -= 1 # position below current position
distanceToCheck = 100.0

hitObject, hitPosition, hitNormal = rayCast(
    lookAtPosition,
    kelp.worldPosition,
    distanceToCheck,
    "ground")

kelp.worldPosition = hitPosition


I hope it helps