You can create a curve asset at runtime.
UPROPERTY(EditInstanceOnly, Category = "Timeline")
FRuntimeFloatCurve Curve;
UPROPERTY(Transient)
TObjectPtr<UCurveFloat> CurveAsset;
void AMyActor::PostInitializeComponents()
{
Super::PostInitializeComponents();
if (GetWorld()->IsGameWorld())
{
UCurveFloat* NewCurve = NewObject<UCurveFloat>(this, NAME_None, RF_Transient);
NewCurve->FloatCurve = *Curve.GetRichCurve();
CurveAsset = NewCurve;
TimelineComponent->AddInterpFloat(CurveAsset, FOnTimelineFloatStatic::CreateUObject(this, &ThisClass::OnTimelineFloat));
}
}