(First of all, just to confirm, an offset variable functions basically the same way in Poisson and negative binomial regression, right?)

Reading about the use of an offset variable, it seems to me that most sources recommend including that variable as an option in statistical packages (exp() in Stata or offset() in R). Is that functionally the same as converting your outcome variable to a proportion if you're modeling count data and there is a finite number that the count could have happened? My example is looking at employee dismissal, and I believe the offset here would simply be log(number of employees).

And as an added question, I am having trouble conceptualizing what the difference is between these first two options (including exposure as an option in the software and converting the DV to a proportion) and including the exposure on the RHS as a control. Any help here would be appreciated.

Recall that an offset is just a predictor variable whose coefficient is fixed at 1. So, using the standard setup for a Poisson regression with a log link, we have:

$$\log \mathrm{E}(Y) = \beta' \mathrm{X} + \log \mathcal{E}$$

where $\mathcal{E}$ is the offset/exposure variable. This can be rewritten as

$$\log \mathrm{E}(Y) - \log \mathcal{E} = \beta' \mathrm{X}$$
$$\log \mathrm{E}(Y/\mathcal{E}) = \beta' \mathrm{X}$$

Your underlying random variable is still $Y$, but by dividing by $\mathcal{E}$ we've converted the LHS of the model equation to be a rate of events per unit exposure. But this division also alters the variance of the response, so we have to weight by $\mathcal{E}$ when fitting the model.

Example in R:

library(MASS) # for Insurance dataset

# modelling the claim rate, with exposure as a weight
# use quasipoisson family to stop glm complaining about nonintegral response
glm(Claims/Holders ~ District + Group + Age,
    family=quasipoisson, data=Insurance, weights=Holders)

Call:  glm(formula = Claims/Holders ~ District + Group + Age, family = quasipoisson, 
    data = Insurance, weights = Holders)

Coefficients:
(Intercept)    District2    District3    District4      Group.L      Group.Q      Group.C        Age.L        Age.Q        Age.C  
  -1.810508     0.025868     0.038524     0.234205     0.429708     0.004632    -0.029294    -0.394432    -0.000355    -0.016737  

Degrees of Freedom: 63 Total (i.e. Null);  54 Residual
Null Deviance:      236.3 
Residual Deviance: 51.42        AIC: NA


# with log-exposure as offset
glm(Claims ~ District + Group + Age + offset(log(Holders)),
    family=poisson, data=Insurance)

Call:  glm(formula = Claims ~ District + Group + Age + offset(log(Holders)), 
    family = poisson, data = Insurance)

Coefficients:
(Intercept)    District2    District3    District4      Group.L      Group.Q      Group.C        Age.L        Age.Q        Age.C  
  -1.810508     0.025868     0.038524     0.234205     0.429708     0.004632    -0.029294    -0.394432    -0.000355    -0.016737  

Degrees of Freedom: 63 Total (i.e. Null);  54 Residual
Null Deviance:      236.3 
Residual Deviance: 51.42        AIC: 388.7

