Podés hacer overloads de las funciones para los distintos tipos de datos:
El código va de memoria:
function Split(AStr: String; ASep: String): TArray<String>; overload;
function Split(AStr: String; ASep: String): TArray<Integer>; overload;
function Split(AStr: String; ASep: String): TArray<Word>; overload;
etc
y en las llamadas:
Código Delphi
[-]procedure Algo;
var AStArr: TArray<String>;
AnIntArr: TArray
AWordArr: TArray;
begin
AStrArr:= Split('Una,prueba,tonta', ',');
AnIntArr:= Split('10,20,30', ',');
AWordArr:= Split('10,20,30', ',');
Espero te sirva.