Yes, you can use R13-R15 for anything that you want in your generated ASM code.  They are what you should use for RET and FRAME.
You should not use R13-R15 for temporary variables across multiple VM commands. For example "function" VM command must not store something in a temporary variable that the "return" command needs to use. That variable would be overwritten if the function called called another function.
One thing that you can do using R13-R15 is 
Assembly Language Functions. Pick one of the registers to be your return pointer.
    @$RIP_123
    D=A
    @$DO_XXX
    0;JMP
($RIP_123)
Then $DO_XXX can contain the long ASM implementation for a VM command.
($DO_XXX)
    @R15    // save RIP
    M=D
    // the long asm code for XXX commands goes here
    @R15
    0;JMP   // go back to caller
This way if XXX comands require something like 15 instructions and there are 100 XXX commands in the program, it will only take 4*100 + (15+4) ASM instructions instead of 1500.
This can be especially effective for "call" commands which are quite long. (But get your calls working in-line before adding this commplication. You don't need to do this optimization for the nand2tetris projects.)
--Mark