For "regret," you essentially have the choice between the paenitere and dolere. (Don't be put off by the term "impersonal," by the way, it is just a grammatical category.)
Paenitere is often constructed impersonally, i.e., me paenitet ..., but this verb often goes in the direction of "I am dissatisfied, it annoys me" etc., so I feel this may not be the best choice here, because I suspect we are not talking about the sort of regret that one feels when missing a train or losing money, etc.
The basic meaning of dolere, on the other hand, is "to feel pain." It is frequently used with the meaning "to feel sorry, to regret," though. I suspect the idea of pain felt over a missed chance fits better in this context.
The rest is pretty straightforward:
Doleo quod numquam tibi dixi me te amare.
(Joonas remarks, non sine causa, that dixi me te amare is technically ambiguous. Is it: "I said I love you" or rather "I said you love me"? There was, as a matter of fact, a question about this particular problem a while ago. But since "I never told you you love me" is a completely implausible reading, I think there is really no ambiguity in practice here.)