If you create a racket-minus.rkt like this:
#lang racket
(provide (except-out (all-from-out racket)
make-hash))
then your main file can do:
#lang htdp/asl
(require "racket-minus.rkt")
(define h
(make-hash (list (list "a" 1))))
(check-expect (hash-ref h "a") 1)
In most Racket-family languages, I would tell you to write (require (except-in racket make-hash)), but the variant of require from #lang htdp/asl does not allow most require subforms:
require: expected a module name as a string, a `lib' form, or a `planet' form, found a part in: (except-in racket make-hash)
Tangentially, the error message is not accurate, given that e.g. (require 2htdp/image) is allowed.
More broadly, I would be concerned that (require racket) would have confusing unintended consequences, since it will shadow so many bindings from ASL, including define, lambda (adding Racket's optional and keyword arguments), and implicit bindings (e.g. #%app and #%datum, which control the meaning of function application and of literal data, respectively). I think you would be better off explicitly importing only what you need from Racket. (If you really wanted to, you could teach in #lang racket after/instead of ASL, but I found the teaching languages very helpful as a student.)
Concretely, along the lines of @shhyou's examples, (require racket) would shadow the definition of cons from ASL, so you could instruct students to create hash tables with Racket-style association lists (but I am not claiming this would be good pedagogy):
#lang htdp/asl
(require racket)
(define h
(make-hash (list (cons "a" 1))))
(check-expect (hash-ref h "a") 1)