Alright, I think I got what 3dRaven means.
The delegate declared in OnlineSessionInterface.h is not declared as a dynamic delegate. Only dynamic delegates can be exposed to blueprint.
I have to declare my own dynamic delegate with the same signature as follows.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameSession.h"
#include "NetworkHelperGameSession.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDynamicOnStartSessionComplete, FName, name, bool, success);
/**
*
*/
UCLASS(BlueprintType, Blueprintable)
class NETWORKHELPER_API ANetworkHelperGameSession : public AGameSession
{
GENERATED_BODY()
public:
ANetworkHelperGameSession() : AGameSession(), _enable_register_server( true ) {}
void RegisterServer() override;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="NetworkHelperGameSession")
bool _enable_register_server;
UPROPERTY(BlueprintAssignable, Category = "NetworkHelperGameSession")
FDynamicOnStartSessionComplete _on_start_session_complete;
};```