As per regex documentation, the (?1: is a capture while the (?: is not captured. So $1 is the first captured string. I am not exactly understanding what you are trying to do - so two alternatives. If you have other subsequent numbers (or characters) that you don't want to mess with, capture them separately and include them in the output. Say something like;
DECLARE @input varchar(100)
SET @input = '_100,_200,_300,_400'
SELECT dbo.RegEx_Replace(@input,'(?:_)((?i:[0-9]+))((?i:.*))', '$1$2')
This gives you: "100,_200,_300,_400"
Alternatively, if these numbers with leading _'s are in a string and you want to just remove any _'s from in front of all of these numbers;
DECLARE @input varchar(100)
SET @input = 'I have _100 and I want to remove _''s from it and this one as well _200 - how?'
SELECT dbo.RegEx_Replace(@input,'(?:_)((?i:[0-9]+))', '$1')
This gives you: "I have 100 and I want to remove _'s from it and this one as well 200 - how?"
HTH