Here are some alternatives. All solutions work if pc is a scalar or vector. No packages are needed. Of them (3) seems particularly short and simple.
1) Match everything (.*) up to the last digit (\\d) and then replace that with the first capture (i.e. the match to the part within the first set of parens), a plus and the second capture (i.e. a match to the last digit).
sub("(.*)(\\d)", "\\1+\\2", pc)
2) An alternative which is even shorter is to match a digit followed by a non-digit and replace that with a plus followed by the match:
sub("(\\d\\D)", "+\\1", pc)
## [1] "bt4+3xx"
3) This one is even shorter than (2). It matches the last 3 characters replacing the match with a plus followed by the match:
sub("(...)$", "+\\1", pc)
## [1] "bt4+3xx"
4) This one splits the string into individual characters, inserts a plus in the appropriate position using append and puts the characters back together.
sapply(Map(append, strsplit(pc, ""), after = nchar(pc) - 3, "+"), paste, collapse = "")
## [1] "bt4+3xx"
If pc were known to be a scalar (as is the case in the question) it could be simplified to:
paste(append(strsplit(pc, "")[[1]], "+", nchar(pc) - 3), collapse = "")
[1] "bt4+3xx"