You could use a negative lookbehind to eliminate 0 unless preceded by a digit:
> d <- c("100001", "012309 template", "separate 00340", "00045", "890 098", "3405 garage", "matter00908")
> gsub("(?<![0-9])0+", "", d, perl = TRUE)
[1] "100001" "12309 template" "separate 340" "45"
[5] "890 98" "3405 garage" "matter908"
Another way using regex:
> gsub("(^|[^0-9])0+", "\\1", d, perl = TRUE)
[1] "100001" "12309 template" "separate 340" "45"
[5] "890 98" "3405 garage" "matter908"
>