You can certainly use an animation without an atlas, in any of the official runtimes. For spine-c, use SkeletonJson_createWithLoader to specify your own attachment loader. See AtlasAttachmentLoader for an example, except your newAttachment method will just be empty since you don't have anything to load for each attachment. After that you just create an Skeleton, pose it using Animation or AnimationState, and call updateWorldTransform like normal. Then, instead of rendering, get the world SRT of each bone and apply it to whatever you want the animation to drive. You can actually do all this just with spine-c, since no rendering is required.
One reason to do this is to drive a UI from an animation. Eg, animate a UI in Spine with some placeholder images, then at runtime load the animation and use it to drive the transforms for actual UI widgets (buttons, sliders, etc). Or maybe you want the animations to drive something else, like parts of a 3D model.