Say you have an animation, where the character raises their hand over multiple frames. You queue this animation on a track, non-looping. When the animation has reached the end, you want the character to keep its hand raised. For this to happen, the last frame of the animation needs to be applied. If it where not, the parts the animation keys would return to the setup pose, if no other animations on a different track keys these parts. This is generally not what you want for non-looping animations.
The reason it works this way is because animation state is essentially stateless. If we didn't keep the track entry for an unlooped animation around and applied it's last frame, we'd instead have to keep around all the states of the properties that animation modified, which gets extremely messy and error prone, and would do exactly the same as the solution we currently have, which is a lot simpler.
Note that you will still receice a "Completed" event when the non-looping animation has reached its end. You can react to that by setting a new animation or clearing the track. Alternativley, you can queue an empty animation (AnimationState.addEmptyAnimation()) or set TrackEntry.trackEnd to the animation's duration.