Is there any way of creating proper UMG Subtitles?

The answer to your question is YES, there is a way, but you need to go into c++ to do it. Long story short there are three steps to accomplish this.

1). You need to expose a certain delegate in the AudioComponent.h to multicast in order to allow it be exposed in BP by making it of type BlueprintAssignable.

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( FOnQueueSubtitles, const TArray<struct FSubtitleCue>&, Subtitles, float, CueDuration );

UPROPERTY(BlueprintAssignable)
FOnQueueSubtitles OnQueueSubtitles;

Those are the two relevant lines in AudioComponent.h

2). Now that you’ve done that you need to go in and change the call of that delegate in SubtitleManager.cpp to be .Broadcast instead of .CallIfBound

AudioComponent->OnQueueSubtitles.Broadcast(QueueSubtitleParams.Subtitles, QueueSubtitleParams.Duration);

3). The third and final step involves being able to use the FSubtitleQue Struct in blueprints. You can do this by going into EngineTypes.h and changing it to be a USTRUCT(BlueprintType) and then setting the values inside to be UPROPERTY(EditAnywhere, BlueprintReadWrite)

USTRUCT(BlueprintType)
struct FSubtitleCue
{
	GENERATED_USTRUCT_BODY()

	/** The text to appear in the subtitle. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=SubtitleCue)
	FText Text;

	/** The time at which the subtitle is to be displayed, in seconds relative to the beginning of the line. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=SubtitleCue)
	float Time;

	FSubtitleCue()
		: Time(0)
	{ }
};

Now that you’ve done all this, you can go into blueprints and use the delegate OnQueueSubtitles to do stuff with the subtitles that are called when an AudioComponent plays anything with a subtitle set. Be careful if you are using SoundWaves with multi-line subtitles, as you will need to write you own logic to allow for them to be displayed at the proper times. I highly recommend look at this post’s answer to understand how that behaves.

You will need to change your text binding in your UMG widget to show the next line after X seconds where X requires some recursive math (for all but the first line, display the next line after Time - LastNodesTime).

Let me know if you have any more questions.

UE4, please, please for the love of god start exposing subtitle system stuff so people can use it in blueprints. Having to go into c++ to change where text is displayed or to setup binding delegates is just not cool.