If freetype library supports rasterizing text just to array of bytes, then you can create a new texture in horde once through h3dCreateTexture and update it dynamically when you need. Otherwise, you are doing a lot of work - encode texture to png, copy it to horde, decode it again to byte array and push it to opengl.
Something like this should work well for you:
Code:
std::string texName = "DynamicText";
width = 256;
height = 256;
H3DRes TextureID = h3dCreateTexture( texName.c_str(), width, height, H3DFormats::TEX_BGRA8, H3DResFlags::NoTexMipmaps );
h3dSetResParamI( yourMaterial, H3DMatRes::SamplerElem, 0, H3DMatRes::SampTexResI, TextureID ); // sets the created texture to your text material
// updating
unsigned char* texData = ( unsigned char * )h3dMapResStream( TextureID, H3DTexRes::TextureElem, 0, H3DTexRes::ImgPixelStream, true, false );
memcpy( texData, freeTypeData, dataSize );
h3dUnmapResStream( TextureID );