after using cross-validation, is a separate train-test split necessary for generating a model? I am going through the excellent book "Introduction to Machine Learning with Python," and reading about cross-validation. I can understand how it makes a more efficient use of the data than a typical train-test split, but the book also contains the caveat:

It is important to keep in mind that cross-validation is not a way to
  build a model that can be applied to new data. Cross-validation
  does not return a model... multiple
  models are built internally, but the purpose of cross-validation is
  only to evaluate how well a given algorithm will generalize when
  trained on a specific dataset.

So if cross-validation doesn't produce a model, does that mean that after performing cross validation, I need to build a model in the typical method using a train/test set? If so that would imply that my cross-validation scores would typically be higher than my final model's scores, since cross-validation makes a more efficient use of the data.
Or is it held that after cross-validation, I can simply train my model against all data without any further test set? That would mean that I've never tested my actual model, so it sounds wrong, but perhaps cross-validation is a valid test since it uses every sample in both training and test? If so it implies that my cross-validation scores would typically be lower than my final model's scores, since only my final model would be trained against all samples.
 A: 
Or is it held that after cross-validation, I can simply train my model against all data without any further test set? 

Yes - the cross validation is a (more efficient) replacement for that test set.

That would mean that I've never tested my actual model, so it sounds wrong, 
   but perhaps cross-validation is a valid test since it uses every sample in both training and test? 

CV treats its training sets as a good approximation to the whole data set (as do other types of resampling validation such as out-of-bootstrap etc.), so it is approximately right. 
There are numerous studies on the error you make with different validation schemes that consider the total = systematic + random error (bias + variance). 
Turns out, with sample sizes (< a few 1000 independent cases) it is better than the alternative of train-test-split where - as you say - you have the advantage of being unbiased but pay for this with much higher variance. 

If so it implies that my cross-validation scores would typically be lower than my final model's scores, since only my final model would be trained against all samples.

Yes - cross validation will have a slight pessimistic bias if done correctly (depending on the slope of the learning curve between the CV train sample size and the total sample size). You trade that for less variance (depending on the test sample size for the train-test split and the total sample size for CV).
A: The phrase from the book doesn't sound right to me, but maybe I don't have the whole context.
Let's assume that we split your whole data set into two: train and test (for example 70%, 30%).
If we apply a cross validation scheme to the training set (not touching test set) by splitting it into several sections (folds), and run the machine learning algorithm with the intention to find the values of hyperparameters that produce the lowest training error, we of course end up with a model (meaning that we also find the values of the parameters of the model).
If we think for a moment why we are doing cross validation, we see that the reason is to reduce the number of freely adjusting parameters. That's why the number of hyperparameters are almost always lower than the number of model parameters. We do this because the number of free parameters increases the bias (very optimistic) in estimation of the expected training error.
Having said that, the cross validation still has freely varying hyperparameters. Therefore the bias is reduced but not completely eliminated. For this reason when you actually run the model emitted by the cross validation on the test set (30% part) the performance will still be worse "on the average" compared to the training.
That's why it is a good idea to still keep a test set aside even if you are building your model with cross validation. The error of the model on the test set is the most honest estimate of expected error.
