It's not legitimate to just fit a line through the whole thing for two reasons:
even if you had only one replicate, you will have autocorrelation in the residuals over time. Observation at $t_n$ is related to the observation at $t_{n-1}$ so you can't treat them as independent. There is actually less information in each observation than if they were independent. So you need a model that takes this into account.
as it happens, you have three replicates. The intercept and the slope are likely to vary for each replicate. You could address this by allowing an interaction of slope and intercept with a fixed factor for replicate, but better is just to treat this as a source of grouped randomness.
The lme() function in Pinheiro and Bates' library(nlme) can solve both of these problems for you (although working out the exact way to treat the residuals can be quite an involved issue).
In terms of how the data should be structured, I think it's best to have three columns - one for which replicate you have, and one each for the time and for the actual measurement. As well as being a good format to fit a model to, this is also a good format for drawing plots easily using ggplot2.

So something like this.
library(ggplot2)
library(nlme)
t1 <- 1:10
f1 <- rnorm(10,13,1) + t1 * rnorm(10,3,1)
t2 <- 1:10
f2 <- rnorm(10,14,2) + t1 * rnorm(10,2,.5)
t3 <- 1:10
f3 <- rnorm(10,14,1) + t1 * rnorm(10,4, 1.5)
fALL <- c(f1, f2, f3)
tALL <- c(t1, t2, t3)
replicate <- rep(c("One", "Two", "Three"), rep(10,3))
fluoro <- data.frame(fALL, tALL, replicate)
rm(f1, f2, f3, t1, t2, t3, replicate) # clean up
fluoro
p <- ggplot(fluoro, aes(x=tALL, y=fALL, color=replicate))
# couple of different versions of the plots
p + geom_line()
p + geom_smooth(method="lm") + geom_point()
# example only - this may be the wrong error structure
model <- lme(fALL ~ tALL, data=fluoro, random=~1|replicate, correlation=corAR1())