Não vou te dar a resposta pronta, mas vou te dar alguns dicas que podem te ajudar a fazer estas mudanças, e vou coloca-lás na ordem que você perguntou.
1º - Você pode criar uma variável com o valor zero, e quando o oponente fizer um ponto, esse valor aumenta em 1, e aplicar essa variável no eixo Y da raquete do oponente. Assim, quando ele for marcando um ponto, o eixo Y da raquete do oponente vai ser alterado, e portanto ele vai errar. É um pouco chato fazer isso, mas da pra fazer.
2º - Esse é o mais simples, e é quase impossivel dar uma dica sem a resposta. No draw, é só colocar a função meioDaQuadra antes da mostraBolinha.
3º - Encontre o valor da borda, ou seja, quando a raquete fica colada nas bordas, qual o valor de y dessa raquete? Descubra esse valor, usando console.log por exemplo, e faça uma condição if, onde se o y da raquete for maior que o da borda, então ele continua com o seu eixo Y. Dessa forma, ele nunca vai ultrapassar, sempre vai esbarrar na condição. Vai dar um pouco de dor de cabeça de fazer, mas vale o esforço.
Espero ter ajudado, qualquer dúvida comenta ai, Valeu.